打开文件
python打开文件有两种写法:
一种是直接open:
f = open('/Users/alice/output.txt', 'r')
另一种是使用with open:
with open('/Users/alice/output.txt') as f:
有什么区别呢?
因为文件使用完毕后必须关闭,否则文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限。
因此一般会在open之后进行close,如下:
f = open('/Users/alice/output.txt', 'r')
print(f.read())
f.close()
为了确保打开文件出错时也能正常关闭,则要使用try...finaly...方法。
try:
f = open('/Users/alice/output.txt', 'r')
print(f.read())
finally:
if f:
f.close()
而使用with open的方式打开文件进行读写后会自行关闭文件,而且语法更为简单。
with open('/Users/alice/output.txt') as f:
print(f.read())
多个文件的读,可以使用
with open('/Users/alice/output.txt','r') as f:
with open('/Users/alice/a.txt','r') as f1:
with open('/Users/alice/b.txt','r') as f2:
写文件
直接open的使用:
f = open('/Users/alice/output.txt', 'w')
f.write('ocr')
f.close()
with open的使用:
with open('/Users/alice/output.txt','w') as f:
f.write('result')
常见错误
在使用的过程中最容易出现的两个错误提示是:
1、io.UnsupportedOperation: not writable
问题原因:文件打开后不具备写的权限,检查打开文件后是否没有 'w'参数,或参数为'r'
解决方案:文件路径后增加'w'
2、TypeError: a bytes-like object is required, not 'str'
问题原因:文件打开后的参数设置为'wb',按二进制write导致写的内容有问题
解决方案:将'wb',改为'w'
3、SyntaxError: unexpected EOF while parsing
问题原因:写的代码构成了无限循环,所以报错,解决即为添加结束条件
解决方案:打开文件后无后续步骤,需要有读写或者close的处理
参数
上述在打开文件以及常见错误中提到了参数 "r"、参数'wb',这个参数决定了打开文件的模式:只读,写入,追加等。
非强制参数,如果无任何参数时,默认文件访问模式为只读,即'r'。
全部参数可能的类型和作用如下:
模式 | 描述 |
---|---|
r | 只读方式打开文件。文件的指针放在文件的开头。 |
rb | 以只读且二进制格式打开文件。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。指针放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。指针放在文件的开头。 |
w | 打开文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开文件,只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
代码参考
拷贝下面代码到pycharm,运行,查看输出结果
#coding = utf-8
f = open('/Users/alice/Documents/Develop/PythonCode/output.txt.txt', 'w')
f.write('ocr')
f.close()
f = open('/Users/alice/Documents/Develop/PythonCode/output.txt.txt','r')
print(f.read())
f.close()
with open('/Users/alice/Documents/Develop/PythonCode/output.txt.txt','w') as f:
f.write('result')
f.close()
with open('/Users/alice/Documents/Develop/PythonCode/output.txt.txt') as f:
print(f.read())
输出结果:
/Users/alice/venv/untitled/bin/python /Users/alice/PycharmProjects/untitled/openfile.py
ocr
result
Process finished with exit code 0