MxL*_*evs 53 python file-io text-parsing
是什么让在'r'模式下解析文本文件比在'rb'模式下解析它更方便?特别是当有问题的文本文件可能包含非ASCII字符时.
lvc*_*lvc 62
这取决于你正在使用的Python版本.在Python 2中,Chris Drappier的答案适用.
在Python 3中,它是一个不同的(更一致的)故事:在文本模式('r')中,Python将根据您提供的文本编码来解析文件(或者,如果您不提供,则依赖于平台的默认值) ,并read()会给你一个str.在binary('rb')模式下,Python不假定文件包含可以合理地解析为字符的内容,并read()为您提供了一个bytes对象.
此外,在Python 3中,通用换行符(在'\n'平台特定的换行符之间进行转换,因此您不必关心它们)可用于任何平台上的文本模式文件,而不仅仅是Windows.
shi*_*ing 12
不同之处在于如何处理行尾(EOL).不同的操作系统使用不同的字符来标记EOL - \n在Unix中,\r在OS X之前的Mac版本中,\r\n在Windows中.在文本模式下打开文件时,读取文件时,Python会用文件替换从文件中读取的特定于操作系统的行尾字符\n.反之亦然,即当您尝试写入\n以文本模式打开的文件时,它将编写特定于操作系统的EOL字符.您可以通过检查找到您的操作系统默认EOL os.linesep.
以二进制模式打开文件时,不会进行映射.你读的是你得到的.请记住,文本模式是默认模式.因此,如果您正在处理非文本文件(图像,视频等),请确保以二进制模式打开文件,否则您最终会通过引入(或删除)某些字节来弄乱文件.
Python也有一个通用的换行模式.在此模式下打开文件时,Python会映射所有字符\r,\n然后映射\r\n到\n.