python3 读写文件换行符的方法

最近在处理文本文件时,遇到编码格式和换行符的问题。

基本上都是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 读写、创建 文件的方法(必看)
  • Python3之文件读写操作的实例讲解
  • 详解Python中的文件操作
  • Python处理文本换行符实例代码
  • Python读写文件方法总结
  • Python 文件读写操作实例详解
  • python之文件的读写和文件目录以及文件夹的操作实现代码
(0)

相关推荐

  • python 读写、创建 文件的方法(必看)

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录:os.removedirs(r"c:\python") 检验给出的路径是否是一个文件:os.path.isfile() 检验给出的路径是否是一个目录:os.path.isdir() 判断是否是绝对路

  • Python处理文本换行符实例代码

    本文研究的主要是Python处理文本换行符的相关内容,具体如下. 源文件每行后面都有回车,所以用下面输出时,中间会多了一行 try: with open("F:\\hjt.txt" ) as f : for line in f: print(line) except FileNotFoundError: print("读取文件出错") 有两种方法处理: 1.print后面带 end='',表示不换行 try: with open("F:\\hjt.txt&

  • Python读写文件方法总结

    本文实例总结了Python读写文件方法.分享给大家供大家参考.具体分析如下: 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象f

  • Python3之文件读写操作的实例讲解

    文件操作的步骤: 打开文件 -> 操作文件 -> 关闭文件 切记:最后要关闭文件(否则可能会有意想不到的结果) 打开文件 文件句柄 = open('文件路径', '模式') 指定文件编码 文件句柄= open('文件路径','模式',encoding='utf-8') 为了防止忘记关闭文件,可以使用上下文管理器来打开文件 with open('文件路径','模式') as 文件句柄: 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加

  • python之文件的读写和文件目录以及文件夹的操作实现代码

    为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用内存.举个例子,对文本文件读取: file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( ) Python读写文件实际操作的五大步骤 一.打开文件 Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你

  • 详解Python中的文件操作

    1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' str3 = ' '.join([str1,str2]) print(str3) 2.三种基本的文件操作模式:r(only-read).w(only-write).a(append) 对文件进行操作的流程: 第一,建立文件对象. 第二,调用文件方法进行操作. 第三,不要忘了关闭文件.(文件不关闭的情况下,内容会放在缓存,虽然P

  • Python 文件读写操作实例详解

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()3.函数用来删除一个文件:os.remove()4.删除多个目录:os.removedirs(r"c:\python")5.检验给出的路径是否是一个文件:os.path.isfile()6.检验给出的路径是否是一个目录:os.path.isdir()7.判断是

  • python3 读写文件换行符的方法

    最近在处理文本文件时,遇到编码格式和换行符的问题. 基本上都是GBK 和 UTF-8 编码的文本文件,但是python3 中默认的都是按照 utf-8 来打开.用不正确的编码参数打开,在读取内容时,会抛出异常. open(dirpath + "\\" + file, mode = "r+", encoding = "gbk", newline = "") 捕获抛出的异常,关闭文件.使用另外一种编码格式打开文件再重新读取. 读取

  • Java正则表达式实现在文本中匹配查找换行符的方法【经典实例】

    本文实例讲述了Java正则表达式实现在文本中匹配查找换行符的方法.分享给大家供大家参考,具体如下: 默认情况下,正则表达式 ^ 和 $ 忽略行结束符,仅分别与整个输入序列的开头和结尾匹配.如果激活 MULTILINE 模式,则 ^ 在输入的开头和行结束符之后(输入的结尾)才发生匹配.处于 MULTILINE 模式中时,$ 仅在行结束符之前或输入序列的结尾处匹配. NLMatch.java: package nlMatch; import java.util.regex.Pattern; /**

  • php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】

    本文实例讲述了php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法.分享给大家供大家参考,具体如下: 下面这几个方法将能够帮你解决这个问题. PHP版将html中的<br />换行符转换为文本框中的换行符: 代码如下: function br2nl($text){ return preg_replace('/<br\\s*?\/??>/i','',$text); } 或者 代码如下: function br2nl($text){ $text=preg_r

  • Python之pandas读写文件乱码的解决方法

    python读写文件有时候会出现   'XXX'编码不能打开XXX什么的,用记事本打开要读取的文件,另存为UTF-8编码,然后再用py去读应该可以了.如果还不行,那么尝试使用文件原有的编码方式读取,参考之前的文章 在pandas中读写csv时候通过制定encoding可以有效防止excel打开或者写入中文乱码 data.to_csv(f_out,index=False,encoding='gb2312') 以上这篇Python之pandas读写文件乱码的解决方法就是小编分享给大家的全部内容了,希

  • IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    在java项目开发中.最开始换行符大家一般是在idea中设置新文件为LF,并且对旧文件通过IDEA下方的点击来更换换行符.很显然,对于几千文件的旧项目明显是不合理.后来我找到idea的官网文档 https://www.jetbrains.com/help/idea/configuring-line-endings-and-line-separators.html 用谷歌翻译后如下,按图操作.握草,九百多的文件改变量. 总结 以上所述是小编给大家介绍的IDEA全量替换一次性解决旧项目并将所有文件换

  • python实现去除空格及tab换行符的方法

    目录 1.先放个大招:去除字符串中所有的空格和tab换行符 2.strip()方法,去除字符串开头或者结尾的空格 3.lstrip()方法,去除字符串开头的空格 4.rstrip()方法,去除字符串结尾的空格 5.replace()方法,去除字符串全部的空格 1.先放个大招:去除字符串中所有的空格和tab换行符 str=" a b c de f " print(str.replace(" ","").replace("\n",

  • php去除换行符的方法小结(PHP_EOL变量的使用)

    一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,可以是世界是多样的.本来在unix世界换行就用/n来代替,但是windows为了体现他的不同,就用/r/n,更有意思的是在mac中用/r.因此unix系列用 /n,windows系列用 /r/n,mac用 /r,这样就用你写的程序在不同的平台上运行有着不少的麻烦.下面是PHP去除换行符的一些常见方法. 第一种写法: 复制代码 代码如下: $content=str_replace("\n","",$cont

  • php表单转换textarea换行符的方法

    下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with '<br

  • Windows下使用命令实现文件换行符替换

    有这么些数据文件,一行一条数据.然后在某些时候需要合并成一整行,数据之间用逗号分隔. 如果在 Linux 下是有N种方法来处理: Windows 下如果使用 EditPlus 或 UltraEdit 等文本编辑器直接进行正则替换也就行了.可碰巧问这个问题的同志从来没听说过这些东西,想在 Windows 下想找个比较便捷的内建工具来做,兜了一圈又一圈,发现还是得靠命令行来"曲线救国": 复制代码 代码如下: for /f "delims=" %i in (src.tx

  • Java 替换字符串中的回车换行符的方法

    使用正则表达式进行替换: 代码片段: String documentTxt = EntityUtils.toString(entity,"gbk");//获取数据 documentTxt=documentTxt.replaceAll("[\\t\\n\\r]", "");//将内容区域的回车换行去除 说明:String类的replaceAll就有正则替换功能. \t为制表符 \n为换行 \r为回车 java正则使用: 示例方法: 复制代码 代码如

随机推荐