python3 读写文件换行符的方法


Posted in Python onApril 09, 2018

最近在处理文本文件时,遇到编码格式和换行符的问题。

基本上都是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 选项。

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 相关文章推荐
Python入门之modf()方法的使用
May 15 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
python组合无重复三位数的实例
Nov 13 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
如何写python的配置文件
Jun 07 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 #Python
Python生成任意范围任意精度的随机数方法
Apr 09 #Python
python网络爬虫学习笔记(1)
Apr 09 #Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 #Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 #Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 #Python
解决Python的str强转int时遇到的问题
Apr 09 #Python
You might like
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP初学者头疼问题总结
2006/07/08 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
python3生成随机数实例
2014/10/20 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python 元类实例解析
2018/04/04 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
python中的协程深入理解
2019/06/10 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
如何使用python代码操作git代码
2020/02/29 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
.net工程师笔试题
2012/06/09 面试题
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
大学班级文化建设方案
2014/05/06 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python