文件的写入是文件读取之后需要学习的对文件的操作。
文件写入
最常用的方法是**.write()方法**,只能传入字符串。要注意一点,使用open()函数打开文件的时候,默认是读取文件的状态,而如果要进行写入,追加等操作,是需要进行设置的,因此不设置的情况下直接用写入方法将会报错。设置的方法也比较简单,就是open()里面再加一个参数。还要注意,写入状态下,不存在指定文件名的文件就会创建,已有文件那么将会删除目前文件名对应文件里面的所有内容。另外.write()方法不会换行,换行需要自己加\n。
with open(file_name,'w',encoding='utf-8') as wenjian: # 'r'表示只读,'w'表示可写,'a'表示追加。
wenjian.write('是不是\n')
wenjian.write('全都得\n')
wenjian.write('从新写\n')
运行之后查看ss文件里面发现:
另外,对象文件名.write()是有返回值的,返回值是字符串里面的字符的个数。
文件追加
上面写的备注有说到,追加是参数’a’,这个状态就不会删除原有内容。
with open(file_name,'a',encoding='utf-8') as wenjian: # 'r'表示只读,'w'表示可写,'a'表示追加。
wenjian.write('是不是\n')
wenjian.write('都不用\n')
wenjian.write('从新写\n')
这时候文件里面就是:
此外还有’r+',表示可读又可写,'w+'和’a+'同理都是同时可读。
新建文件
上面open()函数的参数如果写’x’,那就会新建文件,当然文件已存在的时候会报错。
file_name = 'bao/s'
with open(file_name,'x',encoding='utf-8') as wenjian: # 'r'表示只读,'w'表示可写,'a'表示追加。
wenjian.write('是不是\n')
wenjian.write('都不用\n')
wenjian.write('从新写\n')
可以看到出现了一个新文件,而且写入了内容:
不过不能创建二进制文件。想要读取或操作二进制文件,需要在字母参数后面加一个b,比如’r’写成’rb’。顺带一提,默认的是纯文本文件,而且是在字母参数后面加一个t,只不过默认是纯文本所以不用加,也就是说’r’相当于’rt’。注意,读取二进制文件的时候是是以字节为单位的,纯文本文件则是以字符为单位。二进制文件一般较大,所以建议分批读取。
with open(file_name,'rb') as wenjian:
print(wenjian.read())
b'\xe6\x98\xaf\xe4\xb8\x8d\xe6\x98\xaf\r\n\xe9\x83\xbd\xe4\xb8\x8d\xe7\x94\xa8\r\n\xe4\xbb\x8e\xe6\x96\xb0\xe5\x86\x99\r\n'
可以看到这样就都变成二进制字节了。
读取文件的位置
常用的方法是.tell()方法,可以知道当前读取到了文件里面的位置。
with open(file_name,'rb') as wenjian:
print(wenjian.read(10))
print(wenjian.tell())
b'\xe6\x98\xaf\xe4\xb8\x8d\xe6\x98\xaf\r'
10
另一个方法是.seek(),用于修改当前读取的位置。
with open(file_name,'rb') as wenjian:
wenjian.seek(15)
print(wenjian.tell())
15
.seek()方法还有一个参数,另一个表示计算位置的方式,有三个实参值:0,从头计算,默认值;1,从当前位置计算,也就是之前已经读到10就从10的位置继续计算输入字符(字节)数的位置;2,从末尾开始计算,而且读取可以输入负数,也就是可以从后往前读。
其他操作
除了打开之外,删除、重命名等等都是常见操作,只不过需要用到os模块。
os.listdir(目录),获取指定目录结构,返回值是列表,默认路径是当前目录。
import os
import pprint
r = os.listdir()
pprint.pprint(r)
os.getcwd(),获取当前所在目录。
s = os.getcwd()
pprint.pprint(s)
os.chdir(目录),切换当前所在目录。
os.chdir()
os.mkdir(目录名),在当前目录下添加目录。
os.mkdir('123')
pprint.pprint(r)
os.rmdir(目录名),删除相应的目录。
os.rmdir('123')
os.remove(文件名),删除文件。
os.rename(旧名字,新名字),改文件名,新名字写成完整路径的形式可以达到剪切粘贴的效果。