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实现一个简单的多线程TCP服务器的教程
May 05 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
详解Django框架中的视图级缓存
Jul 23 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
Python装饰器原理与用法分析
Apr 30 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
matplotlib对象拾取事件处理的实现
Jan 14 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
php实现概率性随机抽奖代码
2016/01/02 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
深入解析Python中的lambda表达式的用法
2015/08/28 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
保护环境倡议书范文
2014/05/13 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
顶岗实习协议书
2015/01/29 职场文书
小学生交通安全寄语
2015/02/27 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
vue动态绑定style样式
2022/04/20 Vue.js