文件

文件是外部存储器中具有名称的一组数据。 

Python 中有两种类型的文件:
- text,其中包含断行的文本;文本文件中的特殊字符,只能有换行符(“\n”)和返回行首(“\r”) ;);
- binary,它可以不受限制地存储任何二进制数据(例如,图片、声音、视频等)。

接下来,我们将考虑使用文本文件。

 

使用程序文件的原理
包括三个阶段:
1. 打开一个文件;
2. 处理文件;
3. 关闭文件。
此操作原理称为“三明治原理”。

打开文件时,会指示操作模式:读取、写入或将数据附加到文件末尾。打开的文件被阻止,其他程序无法访问它。使用该文件后,您必须关闭它以断开与程序的连接。当文件关闭时,程序对该文件所做的所有更改都将写入磁盘。 Python 通过文件变量处理文件。

open() 函数允许打开文件 并返回可用于访问文件的文件变量。
f = open(file_name, access_mode)
其中:
- file_name - 要打开的文件名
- access_mode - 文件打开模式。可以是:读、写等,除非特别说明,默认模式是读(r)。 
 
文件打开模式的完整列表
<头> <正文>
 
close() 方法允许您关闭文件

例子
Fin = open("输入.txt") Fout = open("输出.txt")    # 对文件做一些事情 fout.close() Fin.close() 如果打开现有文件进行写入,则其内容将被破坏。程序结束后,所有打开的文件自动关闭。
 

模式 描述
<代码>r 只读。
<代码>w 只可写。如果找不到具有指定名称的文件,将创建一个新文件。
rb 只读(二进制)。
wb 只写(二进制)。如果找不到具有指定名称的文件,将创建一个新文件。
<代码>r+ 用于读写。
<代码>rb+ 用于读写(二进制)。
<代码>w+ 用于读写。如果找不到具有指定名称的文件,将创建一个新的可写文件。
<代码>wb+ 用于读写(二进制)。如果找不到具有指定名称的文件,将创建一个新的可写文件。
一个 打开以添加新内容。如果找不到具有指定名称的文件,将创建一个新的可写文件。
<代码>a+ 打开以添加新内容。如果找不到具有指定名称的条目,将创建一个新文件来读取该条目。
ab 打开以添加新内容(二进制)。如果找不到具有指定名称的文件,将创建一个新的可写文件。
<代码>ab+ 打开以添加新内容(二进制)。如果找不到具有指定名称的条目,将创建一个新文件来读取该条目。

从文件中读取数据

在读取文本文件时,字节流一个接一个地顺序进入程序输入,因此文件提供了对数据的顺序访问。也就是说,如果我们需要从文件中读取第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")