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获取脚本所在目录的正确方法
Apr 15 Python
python通过pil为png图片填充上背景颜色的方法
Mar 17 Python
Python 爬虫的工具列表大全
Jan 31 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python实现杨辉三角思路
Jul 14 Python
Linux下多个Python版本安装教程
Aug 15 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
PyQt5显示GIF图片的方法
Jun 17 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
Python log模块logging记录打印用法解析
Jan 20 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
Python基础之操作MySQL数据库
May 06 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邮件类
2007/01/03 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
关于this和self的使用说明
2010/08/01 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
高级Java程序员面试题
2016/06/23 面试题
大学活动邀请函
2014/01/28 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
中秋节寄语2015
2015/03/24 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
python程序的组织结构详解
2021/12/06 Python