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 3.x读写csv文件中数字的方法示例
Aug 29 Python
手把手教你python实现SVM算法
Dec 27 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
解决python的空格和tab混淆而报错的问题
Feb 26 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
是否存在第一台收音机的说法
2021/03/01 无线电
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
详解js中==与===的区别
2017/01/08 Javascript
jquery实现数字输入框
2017/02/22 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
Java程序员面试题
2016/09/27 面试题
《地震中的父与子》教学反思
2014/04/10 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2015年社区工作总结
2015/04/08 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang