4

我有一个由交易日志生成的帐号列表,按行分隔。

如何将此列表合并到一个文件中,每个帐户仅出现一次而不是多次(每个帐户记录了多个交易)?

Python 是首选,但我也可以使用 C。

4

4 回答 4

5
with open(filename) as fin, open(newfilename, 'w') as fout:
    fout.writelines(set(fin))
于 2013-07-01T23:30:42.037 回答
1

如果您包含示例日志文件和您的操作系统,那将会很有帮助。

如果你在 UNIX 环境下,使用 awk 和 sort 非常简单。

如果您的日志文件(称为 log.txt)在每行的第三个单词中包含帐户信息(请参阅下面的日志文件示例):

LOG WARNING 12345 cancelled ....
LOG WARNING 67482 subscribed ....

请参阅下面的示例,其中美元符号是命令提示符:

$ awk '{print $3}' log.txt | sort -u

如果你在 windows 环境下,你可以下载 cygwin ( http://www.cygwin.com/ ) for Windows,安装它并在命令提示符下运行上述命令。

于 2013-07-01T23:37:18.033 回答
1

如果顺序很重要,那么您可以使用collections.OrderedDict

from collections import OrderedDict

with open('input') as fin, open('output', 'w') as fout:
    uniques = OrderedDict.fromkeys(fin)
    fout.writelines(uniques)
于 2013-07-01T23:39:40.177 回答
1

我不知道你的日志文件是什么样的,但这应该很好用

在蟒蛇中:

file = open('filename.txt', r+)
accountNos = set(file)

file.truncate()
for x in accountNos:
    file.write(x)

file.close()

这会从文件中取出每一行,并将它们存储在一个集合中。集合是一种仅存储唯一元素并删除重复项的数据结构。在第二个 for 循环中,您将该集合的内容写回文件。

于 2013-07-01T23:33:01.957 回答