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学习手册中的python多态示例代码
Jan 21 Python
详解Python编程中包的概念与管理
Oct 16 Python
python实现颜色空间转换程序(Tkinter)
Dec 31 Python
python基于phantomjs实现导入图片
May 13 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
深入了解Python在HDA中的应用
Sep 05 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
Python序列化pickle模块使用详解
Mar 05 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
Selenium 安装和简单使用的实现
Dec 04 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 curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
PHP中list方法用法示例
2016/12/01 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python 获取div标签中的文字实例
2018/12/20 Python
python3.x实现base64加密和解密
2019/03/28 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
挂职自我鉴定
2014/02/26 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
英文导游词
2015/02/13 职场文书
2015年双拥工作总结
2015/04/08 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers