Python、Windows系统写文件如何实现Linux风格的换行符 您所在的位置:网站首页 linux编辑时换行 Python、Windows系统写文件如何实现Linux风格的换行符

Python、Windows系统写文件如何实现Linux风格的换行符

2024-07-04 05:34| 来源: 网络整理| 查看: 265

原文链接:http://www.juzicode.com/python-note-write-file-with-linux-style-crlf-in-windows

为了描述方便,下文\n等价于LF字符,\r等价于CR字符。

Python中open方法创建和写入文件时,写入一个\n(LF)表示要写入一个换行符,但是在windows系统中,默认除了会写入一个\n(LF)字符,还会自动添加一个\r(CR)字符​:

#VX公众号: 桔子code / juzicode.com with open('test.txt','w') as pf: pf.write('juzicode.com\n') pf.write('vx:桔子code\n') with open('test2.txt','w') as pf: pf.write('juzicode.com\r\n') pf.write('vx:桔子code\r\n')

上述代码运行后,用notepad++打开这2个文件,菜单栏设置“视图–显示符号–显示行尾符”:

代码中test.txt写入一行字符串的末尾只有一个\n字符,但是生成的文件实际写入了 \r\n 2个字符,代码中test2.txt写入一行字符串的末尾有2个 \r\n 字符,但是实际写入了 \r\r\n 3个字符,也就是会自动添加进一个\r字符。

这时就会存在这样的问题:在某些情况下并不希望存在自动添加的\r字符,比如在Tesseract-OCR5.0字体训练以及提高准确率、提升训练效率的方法 一文中我们看到生成的训练清单文件不能包含 \r 换行符,如果用Python写文件要如何实现呢?

一个方法是将文件按wb方式打开,并且将要写入的字符转换成bytes字节写入:

#VX公众号: 桔子code / juzicode.com with open('test.txt','wb') as pf: pf.write(bytes('juzicode.com\n',encoding='utf-8')) pf.write(bytes('vx:桔子code\n',encoding='utf-8')) with open('test2.txt','wb') as pf: pf.write(bytes('juzicode.com\r\n',encoding='utf-8')) pf.write(bytes('vx:桔子code\r\n',encoding='utf-8'))

运行结果:

这种情况下并没有自动添加\r字符了。

另外还可以在创建文件对象时入手,从open()方法的说明文档可以看到,open()方法是可以带newline入参的:

所以也可以在创建文件实例时,传入newline入参强制设定newline=’\n’:

#VX公众号: 桔子code / juzicode.com with open('test.txt','w',newline='\n') as pf: pf.write('构建文件对象时传入newline\n') pf.write('juzicode.com\n') pf.write('vx:桔子code\n') with open('test2.txt','w',newline='\n') as pf: pf.write('构建文件对象时传入newline\r\n') pf.write('juzicode.com\r\n') pf.write('vx:桔子code\r\n')

运行结果:

这种方式和按照二进制写入的效果是一样的,也没有多余的 \r 符号。

小伙伴们,你get到了吗?



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有