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

时间:2015-02-22 15:45:10

标签: python-2.7 file-io binaryfiles

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

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

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

with open(FilePath, 'rb') as f:

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

问题:

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

  4. 更新

    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))
    

    其中f1.txt是:

    line1
    
    line3
    

    档案Read_b_Write_wbRead_r_Write_wb& Read_r_Write_w eqauls到源f1.txt

    档案Read_b_Write_w是:

    line1
    
    
    
    line3
    

1 个答案:

答案 0 :(得分:4)

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

  

在Windows上,附加到模式的'b'以二进制模式打开文件,所以   还有'rb','wb'和'r + b'等模式。 Windows上的Python   区分文本和二进制文件;行尾   文本文件中的字符会在数据时自动更改   被读或写。这种对文件数据的幕后修改   适用于ASCII文本文件,但它会破坏这样的二进制数据   在JPEG或EXE文件中。阅读时要非常小心使用二进制模式   并写这样的文件。在Unix上,附加'b'并没有什么坏处   模式,所以你可以平台独立使用它为所有二进制文件   文件。

我从中得到的是使用'rb'似乎是最好的做法,看起来你遇到了他们警告的问题 - 在Windows上用'r'打开一个二进制文件。