windows系统下,python编程使用write操作后,导致unix格式文件换行符变换为windows格式

1.我们都知道,linux下换行为LF,而windows系统下为CRLF。 及\n和\r\n的区别。

对于Windows下为何是”\r\n”,这里引用网上的解释:因为Windows采用了传统的英文打字机模式,它在换行时需分解成两步——回车”\r”和换行”\n”。回车(carriage return,CR)是将小车退回至起点,相当于把光标从行尾切换到行首,换行(line feed,LF)是将小车切换到下一行,这样的组合操作就完成了另起一行的目的。

这导致我们读取入unix格式的文件内容操作后。如果用write的w模式进行内容的写入。那么在windows系统下,会把原来文件里的LF换行,替换为CRLF。但是很多时候,我们处理unix格式文件后,还是希望输出的依然是unix格式的文件。而不是被转换为所谓的dos格式了。

如果想避免这种情况发生的话,就需要以wb模式进行文件内容的写入。这样就不会把原来的LF转换为CRLF了。

如果想把原来dos格式的文件转换为unix格式保存输出,只需要把原来每行的\r\n替换为\n。记得重新写入时,使用wb模式。

2. 另外一点需要注意的是。使用‘b’模式打开的文件,读返回的数据都是字节字符串格式的b'',而不是文本字符串str

如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作。比如:

with open('somefile.bin', 'rb') as f:
    data = f.read(16)                    data是字节字符串
    text = data.decode('utf-8')          decode后为文本字符串 str

with open('somefile.bin', 'wb') as f:
    text = 'Hello World'                  文本字符串str
    f.write(text.encode('utf-8'))         写入二进制文件前需要编码
发布了82 篇原创文章 · 获赞 148 · 访问量 64万+

猜你喜欢

转载自blog.csdn.net/pfm685757/article/details/102499289
今日推荐