如果有 33W 行文字,去重应该怎么写呢?

2017-12-17 00:22:49 +08:00
 warcraft1236

比如有个 txt 文本,一共有 33W 行文字,以行作为单位,去重,我应该怎么写效率会比较高呢?

我目前用的普通的方法,发现耗时比较长

我列出我目前的方法

    with open('/Users/lizhao/Downloads/aboutchinese.dict.yaml') as f:

        for i in f.readlines():
            if i == '\n':
                continue
            if i not in oldList:
                oldList.append(i)

    with open('tmp.txt','w') as g:
        g.writelines(oldList)

代码渣,请轻喷

6512 次点击
所在节点    Python
44 条回复
warcraft1236
2017-12-18 09:56:19 +08:00
@wizardoz
多谢,不过再问一个基础的问题,怎么根据 dict 的 values 排序写入文件呢?
araraloren
2017-12-18 11:09:21 +08:00
.say for f.lines.unique(:with(&[eqv])) (in Perl6, f is IO::Handle)
wizardoz
2017-12-18 13:51:32 +08:00
@warcraft1236
# 排序并丢弃行号信息,得到的是按照原本顺序的文本数据
sorted_lines = sorted([item[0] for item in buffer.items()], cmp=lambda a, b: a[1] - b[1])

# 输出
with open("output.txt", "w") as fp:
for line in sorted_lines:
print(line, file=fp)
shawndev
2017-12-20 21:07:00 +08:00
cat file | uniq

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/415377

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX