Python - 是否建议始终使用'b'模式打开文件?

ida*_*hmu 5 file-io binaryfiles python-2.7

所以我有这个简单的python函数:

def ReadFile(FilePath):
    with open(FilePath, 'r') as f:
        FileContent = f.readlines()
    return FileContent
Run Code Online (Sandbox Code Playgroud)

此函数是通用的,用于打开所有类型的文件.但是,当打开的文件是二进制文件时,此功能无法按预期执行.将open()调用更改为:

with open(FilePath, 'rb') as f:
Run Code Online (Sandbox Code Playgroud)

解决二进制文件的问题(并且似乎在文本文件中保持有效)

题:

  1. 是否安全并建议始终使用rb模式读取文件?
  2. 如果没有,那么它有害的情况是什么?
  3. 如果没有,如果您不知道您正在使用哪种类型的文件,您如何知道使用哪种模式?

更新

FilePath = r'f1.txt'

def ReadFileT(FilePath):
    with open(FilePath, 'r') as f:
        FileContent = f.readlines()
    return FileContent

def ReadFileB(FilePath):
    with open(FilePath, 'rb') as f:
        FileContent = f.readlines()
    return FileContent


with open("Read_r_Write_w", 'w') as f:
    f.writelines(ReadFileT(FilePath))

with open("Read_r_Write_wb", 'wb') as f:
    f.writelines(ReadFileT(FilePath))

with open("Read_b_Write_w", 'w') as f:
    f.writelines(ReadFileB(FilePath))

with open("Read_b_Write_wb", 'wb') as f:
    f.writelines(ReadFileB(FilePath))
Run Code Online (Sandbox Code Playgroud)

在哪里f1.txt:

line1

line3
Run Code Online (Sandbox Code Playgroud)

文件Read_b_Write_wb,Read_r_Write_wb以及Read_r_Write_w来源的eqauls f1.txt.

档案Read_b_Write_w是:

line1



line3
Run Code Online (Sandbox Code Playgroud)

rob*_*x44 4

在 Python 2.7 教程中:\n https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

\n\n
\n

在 Windows 上,附加到模式的“b”以二进制模式打开文件,因此还有“rb”、“wb”和“r+b”等模式。Windows 上的 Python 区分文本文件和二进制文件;当读取或写入数据时,文本文件中的行尾字符会自动稍微改变。这种对文件数据的幕后修改对于 ASCII 文本文件来说没问题,但它会损坏 JPEG 或 EXE 文件中的二进制数据。读取和写入此类文件时要非常小心地使用二进制模式。在 Unix 上,\xe2\x80\x99 向模式附加 \'b\' 不会有什么坏处,因此你可以独立于平台对所有二进制文件使用它。

\n
\n\n

我从中得出的结论是,使用 \'rb\' 似乎是最佳实践,而且看起来您遇到了他们警告的问题 - 在 Windows 上使用 \'r\' 打开二进制文件。

\n