Python:更新文件时保留相同的行尾字符

时间:2017-02-21 13:53:57

标签: python

这是我在文件上执行查找/替换的代码:

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。有什么事我能做到吗?

1 个答案:

答案 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,因为它是由二进制流返回的,所以您必须确保origValnewVal bytes不是str,例如在encode对象上使用str

origVal = tup[1].encode()
newVal = tup[2].encode()

(根据数据,您可能需要使用encode的额外参数:例如:encode("utf-8")