Python基础之文件操作
1、打开文件的方法:
第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间
f=open('/data/1.txt','r+',encoding='utf-8') #后面的r+ 表示打开文件的模式是读写,encoding='-8'是指定编码格式,因为用open()函数打开,open()函数会去找系统的默认编码,windows的系统一般是gbk编码格式的,如果没有指定编码格式就会报错,而mac默认编码就是utf-8,打开就不会报错了,这里的解决办法是在打开文件时,指定编码格式
f.close #关闭文件
第二种:这种会自动关闭文件,不用我们手动关闭;
with open('/data/1.txt','r+',encoding='utf-8') as f:
2、打开文件的模式:
r : 只读模式,默认如果不加模式就是只读模式
r+: 读写模式,读,写,追加,如果文件不存在会报错。
w:只写模式 ,会覆盖文件内容,如果文件不存在会创建
w+: 写读模式 ,会覆盖文件内容,如果文件不存在会创建
a:追加模式 ,如果文件不存在会创建
a+:和a的意思一样
3、读文件的方法:
(1)read()方法,如果文件大的话不要用read()这种方法,可能不能全部读出来,而且比较占内存;
1 f=open("geci.txt","r+",encoding='utf-8') 2 print(f.read())#读文件 3 4 #以上运行的结果是 5 一杯敬朝阳 一杯敬月光 6 7 唤醒我的向往 温柔了寒窗 8 9 于是可以不回头地逆风飞翔 10 11 不怕心头有雨 眼底有霜 12 13 一杯敬故乡 一杯敬远方 14 15 守着我的善良 催着我成长 16 17 所以南北的路从此不再漫长 18 19 灵魂不再无处安放 20 21 一杯敬明天 一杯敬过往 22 23 支撑我的身体 厚重了肩膀
(2)readline()方法,此方法是只读取文件一行的内容;
1 f=open("geci.txt","r+",encoding='utf-8')# 以追加模式打开文件 2 print(f.readline())#读取一行内容 3 4 #以上运行的结果是 5 一杯敬朝阳 一杯敬月光
readline()只读了一行,如果要读全部内容那就用循环去一行一行的读,如下方法:
1 with open('geci.txt','r',encoding='utf-8') as f: 2 while True: 3 line1=f.readline() 4 if len(line1) == 0: 5 break 6 print (line1) 7 8 #以上运行的结果是 9 一杯敬朝阳 一杯敬月光 10 11 唤醒我的向往 温柔了寒窗 12 13 于是可以不回头地逆风飞翔 14 15 不怕心头有雨 眼底有霜 16 17 一杯敬故乡 一杯敬远方 18 19 守着我的善良 催着我成长 20 21 所以南北的路从此不再漫长 22 23 灵魂不再无处安放 24 25 一杯敬明天 一杯敬过往 26 27 支撑我的身体 厚重了肩膀
(3)readlines(),此方法是把文件的每一行放到一个list里面
1 f=open("geci.txt","r+",encoding='utf-8')# 以追加模式打开文件 2 print(f.readlines())#读取一行内容 3 4 #以上运行的结果是 5 ['一杯敬朝阳 一杯敬月光\n', '\n', '唤醒我的向往 温柔了寒窗\n', '\n', '于是可以不回头地逆风飞翔\n', '\n', '不怕心头有雨 眼底有霜\n', '\n', '一杯敬故乡 一杯敬远方\n', '\n', '守着我的善良 催着我成长\n', '\n', '所以南北的路从此不再漫长\n', '\n', '灵魂不再无处安放\n', '\n', '一杯敬明天 一杯敬过往\n', '\n', '支撑我的身体 厚重了肩膀']
4、将文件中的元素转存为集合;
例如users.txt文件中的内容为:
xuezhiqian:wwwww
xiehong:hong
qianren:111111
dajun:qqqqqq
yuxinhong:hong
将此文件转存为集合的方式:
1 result = {} 2 f = open('users.txt', 'r+',encoding='utf-8') 3 for line in f.readlines(): 4 line= line.strip() 5 if not len(line): 6 continue 7 result[line.split(':')[0]] = line.split(':')[1].strip()#将每次循环得到的key和value存到字典中,strip()是去掉换行和空格 8 print(result) 9 10 11 运行结果是: 12 {'xuezhiqian': 'wwwww', 'xiehong': 'hong', 'qianren': '111111', 'dajun': 'qqqqqq', 'yuxinhong': 'hong'}
5.删除文件中的某一行:
1 with open('users.txt','r',encoding='utf-8')as f1: 2 lines =f1.readlines() 3with open('users1.txt','w',encoding='utf-8')as f2: 4 for line in lines: 5 if username.strip()in line: 6 print(username.strip()) 7 continue 8 f2.write(line) 9 10 运行之后:生成一个新的users1.txt的文件,内容为: 11 xuezhiqian:wwwww 12 xiehong:hong 13 qianren:111111 14 yuxinhong:hong
6、文件指针:
1 with open('333.txt','w') as f: 2 f.write(txt3) 3 with open('333.txt','r') as f: 4 print(f.tell()) 5 print (f.readline().strip()) #strip表示去掉换行符和空格 6 print(f.readline().strip()) 7 print(f.tell()) 8 f.seek(0) 9 print(f.readline().strip()) 10 11 #执行结果: 12 0 13 121212121233 14 qwertyu 15 23 16 121212121233
说明:tell() 方法会显示当前的指针(游标)位置,第一次肯定是0,然后读了两行,那指针位置就是在两行之后,然后用seek(0)方法把指针位置调整到0,seek()方法控制指针的位置。再次读取一行,还是读取的第一行,因为指针在哪,就从哪里开始读。