Python-读写文件

python

在写python 代码的过程,我发现在读写文件的过程中有的时候会出现点问题,所以还是想花点时间总结一下,加深一下自己的印象。

读文件

python 中可以用 内置的open()函数来打开一个文件。源码中是这样定义的

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

一般情况向,只需要考虑前面两个参数,也就是 file 和 mode,file 代表的是文件路径,mode指的是打开方式,默认是读方式打开,具体如下表:

mode annotation
‘r’ 以读方式打开
‘w’ 以写方式打开
‘a’ 以追加模式打开
‘x’ 新建一个文件,且以写方式打开
‘b’ 二进制模式
‘t’ text 模式,也就是打开的结果是 str类型的,默认的
‘+’ (打开磁盘文件更新) 读写模式

示例(介绍比较常用的):

  • 以读方式打开文件
#【英文】
#第一种
file = open('/Users/lionel/Downloads/english.txt')
#第二种
file = open('/Users/lionel/Downloads/english.txt','r')


#【中文】
file = open('/Users/lionel/Downloads/Chinese.txt', 'r')
print(file)#控制台无显示,需要以二进制打开,下节会讲
  • 以二进制形式打开
#【英文】
# 以二进制读出,和以读方式读出区别在于开始处多一个 b 字符,标示着是二进制
file = open('/Users/lionel/Downloads/english.txt','rb')

#【中文】
file = open('/Users/lionel/Downloads/Chinese.txt','rb')

中文以二进制打开的结果是:

b'\xe6\xa2\x85\xe8\xa5\xbf\xe6\x98\xaf\xe4\xbd\x8d\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe8\xb6\xb3\xe7\x90\x83\xe8\xbf\x90\xe5\x8a\xa8\xe5\x91\x98\n'

想要表示为中文

file.read().decode('utf-8')

结果是:

梅西是位伟大的足球运动员
  • 读一行文件
    前面调用read()方法可以一次性读取所有内容,可以使用readline()一行一行地读取。

file = open('/Users/lionel/Downloads/Chinese.txt','rb'file.readline().decode('utf-8')

注意:

  • 文件打开后,使用 close() 完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。
  • 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现。
try:
    file = open('/Users/lionel/Downloads/Chinese.txt','rb')
    print(file.read().decode('utf-8'))
finally:
    if file:
        file.close()
  • 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open('/Users/lionel/Downloads/Chinese.txt', 'rb') as file:
    print(file.read().decode('utf-8'))

写文件

写文件其实个读文件是类似的,唯一的区别在于调用的 python 的内置函数 open()函数,传入标识符’w’或者’wb’表示写文本文件或写二进制文件。然后调用 write ()向文件中写入内容。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。

output = open('output', 'wb')
output.write(text)

由于写文件和读文件类似,在这里面就不详细介绍了,有兴趣的可以自己去了解。同样记住要执行 close()方法,建议直接使用 with 语句。

参考文件:python文件读写

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章