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实现socket端口重定向示例
Feb 10 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
基于Python实现文件大小输出
Jan 11 Python
python实现汽车管理系统
Nov 30 Python
python实现扫描ip地址的小程序
Apr 16 Python
python之mock模块基本使用方法详解
Jun 27 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python实现定时发送邮件
Dec 23 Python
Python实现简繁体转换
Jun 07 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内存溢出问题的解决方法
2013/06/25 PHP
php返回json数据函数实例
2014/10/09 PHP
跟我学Laravel之路由
2014/10/15 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php验证手机号码
2015/11/11 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
如何实现JS函数的重载
2006/09/22 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
python的re模块应用实例
2014/09/26 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python如何实现转换URL详解
2019/07/02 Python
python Tensor和Array对比分析
2020/01/08 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
财务经理岗位职责
2013/11/09 职场文书
小学门卫岗位职责
2013/12/17 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
工作调动申请报告
2015/05/18 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB