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实现strcmp函数功能示例
Mar 25 Python
Python中使用PDB库调试程序
Apr 05 Python
python中尾递归用法实例详解
Apr 28 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
python 深度学习中的4种激活函数
Sep 18 Python
Python如何急速下载第三方库详解
Nov 02 Python
python编程的核心知识点总结
Feb 08 Python
Python实现视频自动打码的示例代码
Apr 08 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安全配置
2006/10/09 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
php 中文和编码判断代码
2010/05/16 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python中random模块用法实例分析
2015/05/19 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
css3学习心得分享
2013/08/19 HTML / CSS
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
JSF的标签库有哪些
2012/04/27 面试题
语文教学感言
2014/02/06 职场文书
投资入股合作协议书
2014/10/28 职场文书
法律服务所工作总结
2015/08/10 职场文书
高中生物教学反思
2016/02/20 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Python基本的内置数据类型及使用方法
2022/04/13 Python