Python3读写文件时newline参数的换行符处理详解

林见深
林见深
发布时间:2026-10-13 | 1人浏览过
原创

本文详解Python3中open函数的newline参数在读写文件时的行为差异。读取时,None将统一转为\n,空字符串保留原样;写入时,None自动转换为系统默认换行符,其他值控制具体转换逻辑。结合GBK与UTF-8编码异常处理及Makefile修改案例,提供实用的文件操作方案。

近期在文本文件处理过程中,常遇到编码格式与换行符不一致引发的兼容性问题。

常见的文本文件多采用GBK或UTF-8编码,而Python3默认以UTF-8编码打开文件。若使用不匹配的编码参数读取内容,程序通常会抛出异常。

open(dirpath + "\\" + file, mode = "r+", encoding = "gbk", newline = "")

应对策略是捕获读取时抛出的异常,关闭当前文件对象,随后尝试使用另一种编码格式重新打开并读取文件内容。

在文件读取操作中,

newline参数用于指定读取时对换行符的处理方式。当该参数为None(默认值)时,表示采用通用换行符模式,即无论文件中实际存在的换行符是什么,读取结果均统一转换为“\n”。

当newline设置为空字符串“”时,表示读取过程中不进行任何换行符转换,文件中原始的换行符将被原样保留。

当newline设置为“\n”时,仅将“\n”视为行结束符,而“\r”则被视为普通字符处理。

当newline设置为“\r”时,仅将“\r”视为行结束符,而“\n”则被视为普通字符处理。

在文件写入操作中,

当newline为None时,写入的“\n”会自动转换为系统默认的换行符。例如在Windows系统下,“\r\n”会被转换为“\r\r\n”后写入文件。

当newline设置为“”时,表示不进行任何转换,直接写入原始字符。

当newline设置为“\n”时,同样表示不进行任何转换,直接写入原始字符。

当newline设置为“\r”时,会将写入内容中的“\n”和“\r”均视为“\r”进行写入,因此若原字符串包含“\r\n”,最终写入文件的内容将变为“\r\r”。

实战案例:遍历源码目录下的所有Makefile文件,在“-c”参数前添加“-g”选项。

import os
import re
os.chdir(r"E:\code")
s = os.walk(".")
pattern = re.compile(r"\s-c\s")
for dirpath, dirnames, filenames in s:
	for file in filenames:
		if file.endswith(".mak") or "makefile" in file: #部分以 .mak 结尾,部分以makefile命名
			print(file)
			with open(dirpath + "\\" + file, mode = "r+", encoding = "gbk", newline = "") as f: #newline为空串表示换行符不转换
				try: #编码问题造成的异常
					lines = f.readlines() #一次读取所有的行到内存
					f.seek(0)    #回到文件起始处
					for line in lines:
						#newline = line.replace(" -c "," -g -c ")
						newline= re.sub(pattern, " -g -c ", line)
						f.write(newline)
				except ValueError:
					f.close()
					with open(dirpath + "\\" + file, mode = "r+", encoding = "utf-8", newline = "") as fnew:
						try: 
							lines = fnew.readlines() 
							fnew.seek(0)    
							for line in lines:
								#newline = line.replace(" -c "," -g -c ")
								newline= re.sub(pattern, " -g -c ", line)
								fnew.write(newline)
						except ValueError:
							print("*************** " + dirpath + "\\" + file) #打印utf-8 和 gbk 之外编码的文件名

以上内容即为Python3中处理文件读写换行符的核心方法,希望能为读者提供有价值的参考。欢迎支持本站,获取更多技术分享。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表