gpt4 book ai didi

python-3.x - 使用Python将二进制文件中的 "\r\r\n"替换为 "\r\n"

转载 作者:行者123 更新时间:2023-12-02 16:20:45 25 4
gpt4 key购买 nike

我对 Python 非常陌生,只是通过它来完成一项任务,并且希望得到一些帮助 (Python 3.1)。

我有一个用 DictWriter 用“excel”方言编写的 CSV 文件。创建文件后,我注意到文件中出现了多余的行,经过仔细检查,这是因为每行末尾有“\r\r\n”而不是“\r\n”。

我可以通过以下两种方法之一解决这个问题:

  1. 以二进制模式而不是文本模式打开文件。问题是我一生都无法弄清楚如何让 writerow() 针对二进制文件工作——我遇到了大量的异常。

  2. 第二种(更简单)的解决方案是将所有“\r\r\n”替换为“\r\n”。

但是,在我的尝试中,我遇到了以下错误:

a.不先关闭文件,搜索和替换只会添加更多“\r\r\n”行。b.我尝试先关闭文件,然后以二进制模式重新打开并执行相同的搜索和替换,但出现错误:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process

这是代码:

#code before this writes to the final in text mode
myfile.close()
myfile = open(outputFile, "wb")
for line in fileinput.FileInput(outputFile, inplace=1):
line = line.replace("\r\r\n", "\r\n")
print (line)
myfile.close()

非常感谢任何人可以提供的任何帮助!

最佳答案

更改文件的安全方法(附加除外,可以安全地就地完成)是将其修改后复制到新文件,删除旧文件,重命名新的就像旧的一样。这是避免灾难性错误和数据丢失的一种可靠方法。根据平台的不同,“删除旧的,重命名新的”步骤可以是原子的,但这在 Windows 中很难,而且并不是那么重要。

所以我会简单地这样做——一大堆,除非文件非常大(千兆字节以上):

with open(filename, 'rb') as f:
data = f.read()
with open(newfilename, 'wb') as f:
f.write(data.replace('\r\r\n', '\r\n'))
os.unlink(filename)
os.rename(newfilename, filename)

您的代码的问题在于二进制模式和文本模式之间的混淆 - 例如,您无法从二进制模式打开的文件中正确“读取一行”。

编辑在Python 3.1中,我们需要在这里处理字节实例,不是字符串,因为文件是二进制文件。所以,根据 the docswrite 调用必须变为

  f.write(data.replace(b'\r\r\n', b'\r\n'))

那些b前缀告诉Python我们正在处理字节,而不是字符串

关于python-3.x - 使用Python将二进制文件中的 "\r\r\n"替换为 "\r\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com