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解析xml文件实例分析
May 27 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
Python解惑之True和False详解
Apr 24 Python
详解Python with/as使用说明
Dec 13 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
Python----数据预处理代码实例
Mar 20 Python
Django中的静态文件管理过程解析
Aug 01 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Python 3 判断2个字典相同
Aug 06 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
解决python 3 urllib 没有 urlencode 属性的问题
Aug 22 Python
基于python模拟TCP3次握手连接及发送数据
Nov 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 eval函数用法总结
2012/10/31 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python matplotlib画图实例代码分享
2017/12/27 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
几个MySql的面试题
2013/04/22 面试题
洗煤厂厂长岗位职责
2014/01/03 职场文书
护士工作失误检讨书
2014/09/14 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
先进个人总结范文
2015/02/15 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers