python3 读写文件换行符的方法
最近在处理文本文件时,遇到编码格式和换行符的问题。
基本上都是GBK和UTF-8编码的文本文件,但是python3中默认的都是按照utf-8来打开。用不正确的编码参数打开,在读取内容时,会抛出异常。
open(dirpath+"\\"+file,mode="r+",encoding="gbk",newline="")
捕获抛出的异常,关闭文件。使用另外一种编码格式打开文件再重新读取。
读取文件时,
newline参数用来指定读取时,对换行符的处理。缺省为None,表示通用的换行符(“\n”),即文件的换行符是啥,读出来都是“\n”.
newline=""表示读取的换行符保持不变,原来是啥,读出来还是啥。
newline=“\n”表示遇到"\n"才一行结束,“\r”像其他普通字符一样对待。
newline=“\r”表示遇到"\r"才一行结束,“\n”像其他普通字符一样对待。
在文件写入时,
newline=None时,写入的“\n”自动都变为系统默认的换行符。所以“\r\n”在windows下会变成“\r\r\n”写入。
newline=""表示不做任何转换写入。
newline=“\n”表示不做任何转换写入。
newline=“\r”表示将“\n”和"\r"都当做"\r"进行写入,所以“\r\n”会变成“\r\r”进行写入。
案例:将源码下的所有makefile文件中的-c参数前,加上-g选项。
importos importre os.chdir(r"E:\code") s=os.walk(".") pattern=re.compile(r"\s-c\s") fordirpath,dirnames,filenamesins: forfileinfilenames: iffile.endswith(".mak")or"makefile"infile:#部分以.mak结尾,部分以makefile命名 print(file) withopen(dirpath+"\\"+file,mode="r+",encoding="gbk",newline="")asf:#newline为空串表示换行符不转换 try:#编码问题造成的异常 lines=f.readlines()#一次读取所有的行到内存 f.seek(0)#回到文件起始处 forlineinlines: #newline=line.replace("-c","-g-c") newline=re.sub(pattern,"-g-c",line) f.write(newline) exceptValueError: f.close() withopen(dirpath+"\\"+file,mode="r+",encoding="utf-8",newline="")asfnew: try: lines=fnew.readlines() fnew.seek(0) forlineinlines: #newline=line.replace("-c","-g-c") newline=re.sub(pattern,"-g-c",line) fnew.write(newline) exceptValueError: print("***************"+dirpath+"\\"+file)#打印utf-8和gbk之外编码的文件名
以上这篇python3读写文件换行符的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。