#文件的读写:
## 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\n')f.write('ha\n123\n345\n')f.writelines(['asd\n','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\n')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\r\n\xc4\xe3\xba\xc3\xb0\xa1' #\r\n即回车,在linux中是\n
如果想要输出其原本的数据形式,则需要解码(decode)来实现,即第二个print。此处我们用了 ‘gbk’ 编码来解码,其结果如下:
123你好啊
## wb:以字节方式写文件
f = open('test.py','wb')
在以字节方式写入文件内容时,要注意写入的数据必须是字节格式,字符串是不能写入二进制文件的。所以当写入字符串时:
f.write('123\n')
程序会立刻报错:
TypeError: a bytes-like object is required, not 'str'
正确写入文件主要有如下两种方式:
f.write(bytes('你好\n', encoding = 'utf-8')) #bytes()可将字符串按照指定编码(此处为'utf-8')转换成字节形式f.write('1111\n'.encode()) #此处使用的是encode来将字符串编码成pytes
#其它文件操作方法:
f.flush() #刷新,以在写了一堆数据后保存文件,类似于系统快捷键Ctrl+Sf.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)则程序会先生成一个包含了文件全部数据的列表,然后在列表中每次拿一行。因此在有些情况下会占用较大内存,产生浪费。'''