就地文件编码

Inplace file encoding

我正在尝试从包含大量数据的 csv 文件中删除重复项。删除工作按预期进行,但我似乎无法弄清楚如何在就地删除时更改编码。谷歌搜索答案没有帮助。你们有什么建议吗?

这是我的代码:

seen = set()
for line in fileinput.FileInput('Dupes.csv', inplace=1):
    if line in seen: continue # skip duplicated line
    seen.add(line)
    print(line, end='') 

这个脚本很适合我。

import fileinput
import sys

encoding = 'utf8'
end = '\n'

seen = set()
dupeCount = 0

for line in fileinput.FileInput('Dupes.csv', inplace=1, mode='rU'):
    stripped = line.strip()
    if stripped in seen:
        dupeCount += 1
        continue
    seen.add(stripped)

    # Sends the output in the right representation
    sys.stdout.buffer.write(stripped.encode(encoding) + end.encode(encoding))

print('Removed %d dupes' % dupeCount)

想法是用正确的模式读取文件,然后以正确的编码通过 stdout 写入文件,这是通过以 utf8 的字节表示形式写入所有内容来完成的。

经过口音测试,似乎有效。