文件
文件是外部存储器中具有名称的一组数据。 
Python 中有两种类型的文件:
- 
text,其中包含断行的文本;文本文件中的特殊字符,只能有换行符(“
\n”)和返回行首(“
\r”) ;);
- 
binary,它可以不受限制地存储任何二进制数据(例如,图片、声音、视频等)。
接下来,我们将考虑使用文本文件。
 
使用程序文件的原理
包括三个阶段:
1. 打开一个文件;
2. 处理文件;
3. 关闭文件。
此操作原理称为
“三明治原理”。。
打开文件时,会指示操作模式:读取、写入或将数据附加到文件末尾。打开的文件被阻止,其他程序无法访问它。使用该文件后,您必须关闭它以断开与程序的连接。当文件关闭时,程序对该文件所做的所有更改都将写入磁盘。 Python 通过文件变量处理文件。
open() 函数允许
打开文件 并返回可用于访问文件的文件变量。
f = open(file_name, access_mode), 
其中:
- 
file_name - 要打开的文件名
- 
access_mode - 文件打开模式。可以是:读、写等,除非特别说明,默认模式是读(r)。 
 
文件打开模式的完整列表
<头>
| 模式 | 
描述 | 
东西>
<正文>
| <代码>r代码> | 
只读。 | 
| <代码>w代码> | 
只可写。如果找不到具有指定名称的文件,将创建一个新文件。 | 
rb | 
只读(二进制)。 | 
wb | 
只写(二进制)。如果找不到具有指定名称的文件,将创建一个新文件。 | 
| <代码>r+代码> | 
用于读写。 | 
| <代码>rb+代码> | 
用于读写(二进制)。 | 
| <代码>w+代码> | 
用于读写。如果找不到具有指定名称的文件,将创建一个新的可写文件。 | 
| <代码>wb+代码> | 
用于读写(二进制)。如果找不到具有指定名称的文件,将创建一个新的可写文件。 | 
一个 | 
打开以添加新内容。如果找不到具有指定名称的文件,将创建一个新的可写文件。 | 
| <代码>a+代码> | 
打开以添加新内容。如果找不到具有指定名称的条目,将创建一个新文件来读取该条目。 | 
ab | 
打开以添加新内容(二进制)。如果找不到具有指定名称的文件,将创建一个新的可写文件。 | 
| <代码>ab+代码> | 
打开以添加新内容(二进制)。如果找不到具有指定名称的条目,将创建一个新文件来读取该条目。 | 
表>
 
close() 方法允许您关闭文件。
例子
Fin = open("输入.txt")
Fout = open("输出.txt")
   # 对文件做一些事情
fout.close()
Fin.close()
如果打开现有文件进行写入,则其内容将被破坏。程序结束后,所有打开的文件自动关闭。
 
            
            
                  
            
            
                    
            
                 
     
                
          
	
		
 
     
              
              
                  
                       
            
                
          
            从文件中读取数据
在读取文本文件时,字节流一个接一个地顺序进入程序输入,因此文件提供了对数据的顺序访问。也就是说,如果我们需要从文件中读取第10个值,就必须先读取前面的9个。
 
读取文件的一行允许执行  readline() 方法。此方法在文件变量上调用。
 
Fin = open("输入.txt")
s = Fin.readline()
 
可以对读取的字符串应用各种方法,类似于从键盘读取时使用的方法(split()、map() 等)。例如,如果文件的一行中有两个由空格分隔的数字,那么您可以按如下方式计算它们:
Fin = open("输入.txt")
s = Fin.readline().split() # 空格分割线 s = ["2007", "2021"]
a, b = map(int, s)         # 将 int() 方法应用于列表 s 的所有元素,
  # 即把字符串转成数字
# a, b = int(s[0], s[1])   # 这与上面的行相同
# a, b = [int(x) for x in s] # 与生成器相同
 
read() 方法读取文件的全部内容并返回一个可能包含字符 '\n' 的字符串。如果将整数参数传递给 read() 方法,则不会读取超过指定数量的字符。例如,您可以使用 read(1).  方法逐字节读取文件。
 
打开文件时,确定文件中当前位置的指针被设置为文件的开头,并且在读取时移动到读取数据之后的位置。书写时,指针移动到下一个空闲位置。 
            
            
                  
            
             
                    
            
                 
      
                  
           | 
	
		
 
     
              
              
                  
                       
            
                
          
            写入数据到文件
write() 方法用于将数据写入文件。数字数据必须转换为字符串。这可以通过  format() 方法或  str().  方法来完成
 
 多行文件
使用多行文件时,您需要知道文件中的数据何时用完。为此,您可以使用  readline() 方法的特性:如果文件光标指向文件末尾,则  readline() 方法返回一个空字符串,被视为假布尔值:
 
而真实的:
    s = Fin.readline()
   如果不是 s: break   # 如果在读取字符串时收到空字符串,
  # 循环以 break 语句结束
    print(s, end="")  # 禁用换行,因为从文件读取一行时 
                      #换行符“\n”已保存
 
从多行文件中读取数据的其他方法
1.立即将列表中的所有数据。
Fin = open("输入.txt")
list_strings = Fin.readlines()    #一次读取所有行
Fin.close()
对于 list_strings 中的 s:
   打印(s, end="")
 
2. 使用结构with-as。在这种情况下,文件会在循环结束后自动关闭。
使用 open("input.txt") 作为 Fin:
   对于 Fin 中的 s:
       打印(s, end="")
此构造确保文件已关闭。  
 
 
3.一种Python语言风格的字符串迭代方式(推荐使用这种方式)。在这种情况下,文件也会自动关闭。
for s in open("input.txt"):
   打印(s,结束=“”)
 
            
            
                  
            
             
                    
            
                 
      
                  
           | 
	
		
 
     
              
              
                  
                       
            
                
          
            西里尔文文件
如果文件包含俄文字母(编码大于 127 的任何字符),则必须在打开时指定编码
 
data = open("input.txt", "r", encoding="utf-8") 
            
            
                  
            
             
                    
            
                 
      
                  
           |