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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
Django ValuesQuerySet转json方式
Mar 16 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
详解Python中的路径问题
Sep 02 Python
k-means & DBSCAN 总结
Apr 27 Python
Python关于OS文件目录处理的实例分享
May 23 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
element form 校验数组每一项实例代码
2019/10/10 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python中pow函数用法及功能说明
2020/12/04 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
满月酒答谢词
2014/01/14 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
解析原生JS getComputedStyle
2021/05/25 Javascript