Python基础:打开和读写文件

打开文件

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

猜你喜欢

转载自blog.csdn.net/alice_tl/article/details/89426362