目录
- 1.文件操作
- 1.打开文件
- 2.关闭文件
- 3.写文件
- 4.读文件
- 2.上下文管理器
1.文件操作
1.打开文件
- 使用内建函数
open()
打开一个文件f = open('D:/test.txt', 'r')
- 参数:
- 第一个参数是一个字符串,表示要打开的文件路径
- 第二个参数是一个字符串,表示打开方式
r
表示按照读方式打开w
表示按照写方式打开a
表示追加写方式打开
- 返回值:
- 如果成功,返回一个文件对象,后续的读写文件操作都是围绕这个文件对象展开
- 如果失败(比如路径指定的文件不存在),就会抛出异常
2.关闭文件
- 使用
close()
关闭已经打开的文件f.close()
- 使用完毕的文件要记得及时关闭
- 一个程序能同时打开的文件个数,是存在上限的
- 当一个程序打开的文件个数超过上限,就会抛出异常
flist = [] count = 0 while True:f = open('d:/test.txt', 'r')flist.append(f)count += 1print(f'count = {count}')
- 上述代码中,使用一个列表来保存了所有的文件对象,如果不进行保存,那么 Python 内置的垃圾回收机制(GC),会在文件对象销毁的时候自动关闭文件
- 但是由于垃圾回收操作不一定及时,所以写代码仍然要考虑手动关闭,尽量避免依赖自动关闭
3.写文件
- 写文件,要使用写方式打开,
open()
第二个参数设为'w'
- 使用
write()
写入文件f = open('D:/test.txt', 'w') f.write('SnowK') f.close()
- 如果是使用
'r'
方式打开文件,则写入时会抛出异常 - 注意:
- 使用
'w'
一旦打开文件成功,就会清空文件原有的数据 - 使用
'a'
实现"追加写",此时原有内容不变,写入的内容会存在于之前文件内容的末尾
- 使用
4.读文件
- 读文件内容需要使用
'r'
的方式打开文件 - 使用
read()
完成读操作,参数表示"读取几个字符"f = open('D:/test.txt', 'r') result = f.read(2) print(result) f.close()
- 如果文件是多行文本,可以使用
for
循环一次读取一行- 先构造一个多行文件
f = open('D:/test.txt', 'r') for line in f:print(f'line = {line}') f.close()
- 注意:
- 由于文件里每一行末尾都自带换行符,
print()
打印一行的时候又会默认加上一个换行符, 因此打印结果看起来之间存在空行 - 使用
print(f'line = {line}', end='')
手动把print()
自带的换行符去掉end
参数表示每次打印之后要在末尾加个啥- 默认是
\n
- 修改成
''
表示啥也不加
- 由于文件里每一行末尾都自带换行符,
- 先构造一个多行文件
- 使用
readlines()
直接把文件整个内容读取出来,返回一个列表,每个元素即为一行f = open('D:/test.txt', 'r') lines = f.readlines() print(lines) f.close()
- 关于中文的处理:修改打开文件的代码,给
open()
加上encoding
参数,显式的指定为和文本相同的字符集,问题即可解决f = open('D:/test.txt', 'r', encoding = 'utf8')
2.上下文管理器
- 打开文件之后,是容易忘记关闭的,Python提供了上下文管理器,来帮助程序猿自动关闭文件
- 个人感觉有点 RAII 思想的感觉,理解上参照C/C++中的智能指针
- 使用:
- 使用
with
语句打开文件 - 当
with
内部的代码块执行完毕后,就会自动调用关闭方法with open('D:/test.txt', 'r', encoding='utf8') as f:lines = f.readlines()print(lines)
- 使用