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)