文件
文件是外部存储器中具有名称的一组数据。
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")
|