python---文件
1. 打开文件
我们在使用文件之前要先将文件打开,这通过open()函数实现。 open()函数的语法如下:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file:必需,文件路径(相对或者绝对路径)
mode: 文件打开模式
buffering:设置缓冲
encoding: 编码模式
errors: 报错级别
newline:区分换行符
closefd: 设置打开底层文件描述符
mode 参数有:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。如果文件不存在, 报错 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
默认为文本模式,如果要以二进制模式打开,加上 b 。
# 打开文件 file = open('name.txt', 'r') #如果文件不存在,报错 FileNotFoundError: [Errno 2] No such file or directory: 'name.txt' file = open('name.txt', 'w') #润国文件不存在时, 会自动创建一个文件, 覆盖源文件 file = open('name.txt', 'x') # 如果文件不存在自动创建一个文件, 如果文件已存在,报错 FileNotFoundError: [Errno 2] No such file or directory: 'name.txt' file = open('name.txt', 'a') #如果源文件有内容, 会追加到源文件后面 file = open('name.txt', 'b') #报错: ValueError: Must have exactly one of create/read/write/append mode and at most one plus file = open('name.txt', 'rb')
2. 文件指针
f.tell()查看文件指针当前距离文件开头的位置
file = open('name.txt', 'w+') print(file.tell()) file.write('Hello World') print(file.tell()) content = file.read() print(content) """ 运行结果: 0----写入之前的指针位置 11----写入之后的指针位置 """ 文件内容没有读取出来, 是因为写完文件之后, 指针指向了11。
f.seek(offset, whence): 控制文件指针的移动
参数
offset: 开始的偏移量,也就是代表需要移动偏移的字节数
whence:(可选) 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的1 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的 强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用
返回值:
如果操作成功,则返回新的文件位置, 如果操作失败,则返回-1
file = open('name.txt', 'w+') print(file.tell()) #写入内容之前的指针位置 file.write('Hello World') #写入内容 print(file.tell()) #写入之后的指针位置 file.seek(0, 0) #将指针位置移到开头位置 content = file.read() print(content) """ 运行结果: 0 11 Hello World """
3. 写入文件
write(): 参数是字符串
file = open('test.txt', 'w') file.write('hello,world') file.close()

file = open('test.txt', 'w') file.write('hello,\nworld') file.close()
writeline():参数是字符串序列
file = open('test.txt', 'w') s = ['hello', 'world'] file.writelines(s) file.close()
file = open('test.txt', 'w') s = ['hello', 'world'] file.writelines('\n'.join(s)) file.close()
3. 读取文件
read()
读取全部文件, 返回值是字符串
file = open('test.txt', 'r') content = file.read() print(content) file.close()
#运行结果:
hello, world
hello, python
hi, Elsa
readline()
读取一行,返回值是字符串
file = open('test.txt', 'r') line = file.readline() while line != '': print(line, end='') line = file.readline() file.close() """ 运行结果: hello, world hello, python hi, Elsa """
readlines()
读取一行, 返回值是列表
file = open('test.txt', 'r') lines = file.readlines() print(lines) file.close() #运行结果:['hello, world\n', 'hello, python\n', 'hi, Elsa']
4. 关闭文件
close()
try: file = open('test.txt', 'r') content = file.read() print(content) except Exception: print('文件读取异常') finally: file.close()
5. with 语句
使用with语句时,代码更加简洁,而且不用主动关闭文件,在with语句体退出时,会自动关闭文件,即便with语句体中发生了异常。下边示例与上边示例比起来更加简洁。
with open('test.txt', 'r') as f: content = f.read() print(content)