#文件的读写:
## r:只读
f = open('File.txt','r') # r:只读 data = f.read() print(data) f.close() #及时关闭,释放内存
open函数默认即为只读模式,故其中的 ' r ' 可不写。文件访问结束后要及时close()。
## w:覆盖文件原始数据后写入新数据
f = open('File.txt','w') #'w':覆盖原数据来写入。 f.write('hahaha ') f.write('ha 123 345 ') f.writelines(['asd ','123','1']) #只能是字符串 f.close()
在‘w’条件下,若open函数指定的文件不存在,则会新建一个该文件来写入数据。
## a:不覆盖原始数据,只在原始数据后追加新数据(不可读)
f = open('File.txt','a')
其它操作方法同 ' w '。
# 使用with as 语句可避免使用f.close()
with open('new.txt', 'w') as f: #等效于f = open('new.txt', 'w') f.write('hahaha ') with open('new.txt') as f: print(f.read())
#文件在b模式下的读写:
b模式即以字节的方式来读写文件,b模式下的open函数无法指定其编码方式。在b模式下,就要常常对字符串和字节进行编码(encode)或解码(decode)转换:
字符串------encode-----> bytes
bytes -------decode-----> 字符串
## rb:以字节方式读文件
新建File.txt文件,其内容为:
123
你好啊
f = open('File.txt','rb') #不能指定编码方式,即不能添加encoding:'xxx' print(f.read()) print(f.read().decode('gbk'))
上面第一个print是直接输出 f 的内容,故其输出结果为字节方式的文件内容,结果如下:
b'123 xc4xe3xbaxc3xb0xa1' # 即回车,在linux中是
如果想要输出其原本的数据形式,则需要解码(decode)来实现,即第二个print。此处我们用了 ‘gbk’ 编码来解码,其结果如下:
123
你好啊
## wb:以字节方式写文件
f = open('test.py','wb')
在以字节方式写入文件内容时,要注意写入的数据必须是字节格式,字符串是不能写入二进制文件的。所以当写入字符串时:
f.write('123 ')
程序会立刻报错:
TypeError: a bytes-like object is required, not 'str'
正确写入文件主要有如下两种方式:
f.write(bytes('你好 ', encoding = 'utf-8')) #bytes()可将字符串按照指定编码(此处为'utf-8')转换成字节形式 f.write('1111 '.encode()) #此处使用的是encode来将字符串编码成pytes
#其它文件操作方法:
f.flush() #刷新,以在写了一堆数据后保存文件,类似于系统快捷键Ctrl+S f.seek(3) #将文件里的光标位置从开头移动3个字节 f.seek(-3,2) #此处2代表从文件末尾移动光标,-3说明向前移动三个字节。(注意:在2模式下,第一个参数一定要加上-号) #循环文件的推荐方式: f = open('a.txt','r') for i in f: print(i) ''' 这种方式循环时,是从文件中每次拿一行数据,若使用: for i in f.readlines(): print(i) 则程序会先生成一个包含了文件全部数据的列表,然后在列表中每次拿一行。因此在有些情况下会占用较大内存,产生浪费。 '''