python文件处理
方法一:
f=open(file='D:/工作日常/test.txt',mode='r',encoding='utf-8')data=f.read()f.close
方法二:
withopen(file='D:/工作日常/test.txt',mode='r',encoding='utf-8')asfdata=f.read()file='D:/工作日常/test.txt'表示文件路径mode='r'表示只读(可以修改为其他)encoding='utf-8'表示字符编码f.read()表示读取所有内容,内容是已经转换完毕的字符串。f.close()表示关闭文件
不清楚要处理的文件是什么编码处理办法:
pip install chardet 安装chardet ##检测编码模块
importchardetf=open('log',mode='rb')data=f.read()f.close()result=chardet.detect(open('log',mode='rb').read())print(result)输出:{'encoding':'GB2312','confidence':0.99,'language':'Chinese'}print(chardet.detect(b'Hello,world!'))输出:{'encoding':'ascii','confidence':1.0,'language':''}
循环文件:
f=open("test.txt",'r',encoding="utf-8")forlineinf:print(line)f.close()
写文件:
f=open(file='D:test.txt',mode='w',encoding='utf-8')f.write('test,test')f.close()file='D:/test.txt'表示文件路径mode='w'表示只写encoding='utf-8'将要写入的unicode字符串编码成utf-8格式f.write(...)
表示写入内容,写入的内容是unicode字符串类型,内部会根据encoding转换为制定编码的01101010101,即:字节类型f.close()f=open(file='D:/test.txt',mode='wb')f.write('test,test'.encode('utf-8'))f.close()file='D:/test.txt'表示文件路径mode='wb'表示只以2进制模式写f.write(...)表示写入内容,写入的内容必须字节类型,即:是某种编码格式的二进制格式f.close()
注意:
文件操作时,以“w”或者"wb"模式打开,则只能写,并且在打开的同时会先将内容清空。
在写入到硬盘上时,必须是某种编码的二进制,打开时需要注意:
wb,写入时需要直接传入以二进制格式,即字节类型
w和encoding,写入时需要传入unicode字符串,内部会根据encoding指定的编码将unicode字符串转换为该编码的二进制格式
追加:
把内容追加到文件尾部
f=open("test.txt",'a',encoding="gbk")f.write("\ntest2北京1674913324523342")f.close()
注意:
文件操作时,以“a”或者“ab”模式打开,则只能追加,即:在原来内容的尾部追加内容
写入硬盘上时,必须是某种编码的二进制格式,打开时需要注意:
ab,写入是需要直接传入某种编码的二进制格式,即:字节类型
a和encoding,写入时需要传入unicode字符串,内部会根据encoding指定的编码将unicode字符串转换为该编码的二进制格式
读写模式:
f=open("test.txt",'r+',encoding="gbk")data=f.read()#可以读内容print(data)f.write("\nblackgirl河北1675013542342233")#可以写f.close()写入的文件追加到文件最后
写读模式:
f=open("test.txt",'w+',encoding="gbk")data=f.read()print(data)f.write("\nnewline1哈哈")f.write("\nnewline2哈哈")f.write("\nnewline3哈哈")f.write("\nnewline4哈哈")print("content",f.read())f.close()此时查看文件内容发现,里面只有4条newline..内容,之前的旧内容全没了,事实代表,w+会先把文件清空,再写新内容,相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容。seek()方法用于移动文件读取指针到指定位置fileObject.seek(offset[,whence])
参数
offset-- 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
seek如果直接写入文件,偏移量有数据的话就会替换掉之前的数据,这是因为硬盘的存储原理导致的,当文件存储硬盘中,硬盘就会划分一块空间,存储数据,当你再次读取文件时,seek到某个位置,每做出一次修改,就会把原来的数据覆盖掉,如果想直接插入,是不可能的,因为后边的数据在硬盘上不会整体向后偏移。
如果想要修改数据,需要把硬盘中的数据全部读取到内存中,然后在内存中修改数据(增删改查),修改过后,再把内容全部写回硬盘,把原来的数据全部覆盖掉。vim、word各种文本编辑器就是这样的原理。
占硬盘方式的文件修改代码示例
importosf_name="test.txt"f_new_name="%s.new"%f_nameold_str="乔亦菲"new_str="[乔亦菲YifeiQiao]"f=open(f_name,'r',encoding="utf-8")f_new=open(f_new_name,'w',encoding="utf-8")forlineinf:ifold_strinline:new_line=line.replace(old_str,new_str)else:new_line=linef_new.write(new_line)f.close()f_new.close()os.rename(f_new_name,f_name)#把新文件名字改成原文件的名字,就把之前的覆盖掉了,windows使用os.replace#
练习题:
练习题1 —— 全局替换程序:
写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换
`python your_script.py old_str new_str filename`
替换完毕后打印替换了多少处内容
importsys,os,reiflen(sys.argv)<=4:print('usage:./practice.pyold_textnew_textfilename')old_text,new_text=sys.argv[1],sys.argv[2]filename=sys.argv[3]withopen(file=filename,mode='r',encoding='utf8')asf:data=f.read()#print(data)count=re.findall(old_text,data)print('修改%s处内容'%len(count))data=data.replace(old_text,new_text)print(data)withopen(file='%s_new'%filename,mode='w',encoding='utf8')asf:f.write(data)os.rename('%s_new'%filename,filename)
模式
描述
t
文本模式 (默认)。
x
写模式,新建一个文件,如果该文件已存在则会报错。
b
二进制模式。
+
打开一个文件进行更新(可读可写)。
U
通用换行模式(不推荐)。
r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+
打开一个文件用于读写。文件指针将会放在文件的开头。
rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。