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)

 

posted @ 2022-01-20 15:26  ElsaWang  阅读(66)  评论(0)    收藏  举报