所以我有这个简单的python函数:
def ReadFile(FilePath):
with open(FilePath, 'r') as f:
FileContent = f.readlines()
return FileContent
此功能是通用的,用于打开所有类型的文件。但是,当打开的文件是二进制文件时,此功能无法按预期执行。将open()调用更改为:
with open(FilePath, 'rb') as f:
解决二进制文件的问题(并且似乎在文本文件中保持有效)
rb
模式来阅读文件?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_wb
,Read_r_Write_wb
& Read_r_Write_w
eqauls到源f1.txt
。
档案Read_b_Write_w
是:
line1
line3
答案 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'打开一个二进制文件。