python3 读写文件换行符的方法
作者:zhouguoqionghai 发布时间:2021-09-29 11:21:22
标签:python,读写,文件,换行符
最近在处理文本文件时,遇到编码格式和换行符的问题。
基本上都是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 之外编码的文件名
来源:https://blog.csdn.net/zhouguoqionghai/article/details/60879794


猜你喜欢
- 文章摘要本文简单说明了FLV文件的格式,以此为出发点,使用 Python 实现FLV视频的拼接。一.FLV文件格式关于FLV文件格式的解析网
- 本文实例讲述了Python求两个文本文件以行为单位的交集、并集与差集的方法。分享给大家供大家参考。具体实现方法如下:s1 = set(ope
- 这里首先要介绍官方文档,对python有了进一步深度的学习的大家们应该会发现,网上不管csdn或者简书上还是什么地方,教程来源基本就是官方文
- 便携文档格式 (PDF) 是由 Adobe 开发的格式,主要用于呈现可打印的文档,其中包含有 pixel-perfect 格式,嵌入字体以及
- 首先声明,没有什么不良动机,因为经常会用 translate.google.cn,就想着用 Python 模拟网页提交实现文档的批量翻译。据
- 点击vue路由跳转,控制台报错:Avoided redundant navigation to current location: &
- 前两篇讲述了Django的理论,从这篇开始,我们真正进入Django实战部分,今天先从用户认证开始。当大家平时打开一个网站时,第一步一般做什
- 第一次使用csdn写一个文章,如果有什么写的不对的地方,欢迎在下面评论指正,谢谢各位。1.明确要使用的包首先就是opencv的函数库,还有p
- 如今各个框架都在模块化,连前端的javascript也不例外。每个模块负责一定的功能,模块与模块之间又有相互依赖,那么问题来了:javasc
- 日常会有很多固定报表需要手动更新,本文将利用python实现多线程运行oracle代码,并利用xlwings包和numpy包将结果写入到指定
- 在Python2.x中表示八进制的方式有两种:以'0'开头和以'0o'(字母o)开头: Pyth
- Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以
- 一、前言最近新买了一台 LG Gram,电脑空荡荡的,啥都得重头装,记录一下 Git 的安装过程,温习温习。二、Git 的安装2.1 Git
- 前言此Julia非彼Julia,指的是对于某复数 &nb
- 废话不多说, 先看代码创建一个钉钉机器人, 必须使用加签方式1. 安装 ding 模块包go get -u github.com
- 1、通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。2、能让你在众多不同的程序中重用函数。将函数存储在独立文
- PyQt5动态(可拖动控件大小)布局控件QSplitter简介PyQt还提供了特殊的布局管理器QSplitter。它可以动态地拖动子控件之间
- 网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。关于数据库的谣言也有不少,比
- 1、使用os.system()方法os.system用来执行cmd指令,在cmd输出的内容会直接在控制台输出,返回结果为0表示执行成功。示例
- 不知道工商银行帐号是否是这样的格式, 如果错了请大家见谅!<script language="javascript"