1、打开文件#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
## (1) r 只能读取。若文件不存在,会报错。
f = open("test.txt", "r")
#由于默认mode="r", 等价于 f = open("test.txt")
##文件对象f具有读取的相关方法
## (2) w 只能写入。若文件已存在,会覆盖原有内容;若不存在会新建。
f = open("test.txt", "w")
##文件对象f具有写入的相关方法
## (3) x 只能写入。若文件已存在,会报错;若不存在会新建。
## (4) a 只能写入。若文件已存在,会追加;若不存在会新建。
## (5) r+ 可读可写。若文件不存在会报错;已存在会追加。
f = open("test.txt", "r+")
##文件对象f具有读取和写入的相关方法
## (6) w+ 可读可写。若文件不存在会新建;已存在会覆盖。
f = open("test.txt", "w+")
|
在打开文件,进行读取/写入等操作后,待退出时,记得f.close()
。
2、文件读取#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import os
os.system("cat test.txt")
# hello
# world!
##(1) read方法:逐字符读取,默认读取全部文本内容,将换行符转换为 \n
f = open("test.txt")
f.read()
# 'hello\nworld!\n'
f.close()
###read()方式只支持逐字符从头到尾的读一遍,可设置参数每次读几个字符,接续读取
f = open("test.txt")
f.read(3) #从头到尾读接续3个字符,读完为止
f.close()
##(2) readline()方法:逐行读取,每次返回一行。可设置参数,读取每行的前几个字符
f = open("test.txt")
f.readline()
# 'hello\n'
f.close()
### f.readlines()方法:逐行读取,返回一个列表,包含所有行。
|
3、文件写入#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import os
f = open("newfile.txt", "w")
f.write("hello\nworld\n") #等价于下面的命令
#f.writelines(["hello\n","world\n"])
f.close()
os.system("cat newfile.txt")
# hello
# world
f = open("newfile.txt", "a")
f.write("I am a newer")
f.close()
os.system("cat newfile.txt")
# hello
# world
# I am a newer
|
4、with语句#
使用with语句打开一个文件并赋予给一个变量。在语句体中执行文件读写操作。语句结束后会自动关闭文件,无需使用close()
语句。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
##(1)基础用法
with open("newfile.txt", "w") as f:
f.write("aaaa\nbb\nccccc\nd\n")
os.system("cat newfile.txt")
# aaaa
# bb
# ccccc
# d
##(2)使用with语句迭代所有行
with open("newfile.txt") as f:
for line in f.readlines():
print(line.strip("\n")) #去除行末尾的 \n
# aaaa
# bb
# ccccc
# d
##(3)上面的迭代适用于不那么大的文件。如果需要处理特别大的文件,可使用while
with open("newfile.txt") as f:
while True:
line = f.readline() #逐行读取
if not line: break #如果空,则停止
print(line.strip("\n"))
|
5、fileput模块迭代行#
延迟行迭代–因为它只读取实际需要的文本部分。适合于大文件的读取操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import fileinput
for line in fileinput.input("newfile.txt"):
print(line.strip("\n"))
fileinput.close()
# aaaa
# bb
# ccccc
# d
#fileinput.filename():返回当前文本的名称
#fileinput.lineno():返回行号
import fileinput
for line in fileinput.input("newfile.txt"):
print("这是第%s行:%s" % (fileinput.lineno(), line.strip("\n")))
# 这是第1行:aaaa
# 这是第2行:bb
# 这是第3行:ccccc
# 这是第4行:d
|
6、pickle保存#
- 如上默认仅支持进行文本文件的读写操作;
- pickle模块支持大多数python对象的储存与读取,例如字典、机器学习模型等
1
2
3
4
5
6
7
8
9
10
|
import pickle
a = 1
# 保存
with open('data.pickle', 'wb') as f:
pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)
# 读取
with open('data.pickle', 'rb') as f:
b = pickle.load(f)
|