这是我在文件上执行查找/替换的代码:
def updateFiles():
fileToUpdt = tup[0]
origVal = tup[1]
newVal = tup[2]
curfiledata = None
with open(fileToUpdt, 'r') as curfile :
curfiledata = curfile.read()
curfiledata = curfiledata.replace(origVal, newVal)
with open(fileToUpdt, 'w') as curfile:
curfile.write(curfiledata)
问题是输入文件中的行有时是CRLF,有时只是LF,但write命令总是返回CRLF。当原始行是LF时,我希望它保留该换行符而不是放入CR。换句话说,换行符应该始终与输入文件中的换行符相同,因此如果它是CRLF,它应该保持CRLF,但如果它是LF,那么它应该保持LF。有什么事我能做到吗?
答案 0 :(得分:1)
首先,将b
(二进制)添加到读/写模式以使python忽略这些行并将文件视为二进制文件。
with open(fileToUpdt, 'rb') as curfile :
curfiledata = curfile.read()
和
with open(fileToUpdt, 'wb') as curfile:
curfile.write(curfiledata)
在python 2中,这已经足够了,但在Python 3中,curfiledata
的类型为bytes
,不再是str
,因为它是由二进制流返回的,所以您必须确保origVal
和newVal
bytes
不是str
,例如在encode
对象上使用str
。
origVal = tup[1].encode()
newVal = tup[2].encode()
(根据数据,您可能需要使用encode
的额外参数:例如:encode("utf-8")