比较python中的两个列表项

时间:2010-03-02 14:51:21

标签: python file compare

我有两个文件,我加载到列表中。第一个文件的内容是这样的:

d.complex.1
23
34
56
58
68
76
.
.
.
etc
d.complex.179
43
34
59
69
76
.
.
.
etc

第二个文件的内容也相同但具有不同的数值。请考虑从一个d.complex。*到另一个d.complex。*作为一组。

现在我有兴趣将第一个文件集中的每个数值与第二个文件中集合的每个数值进行比较。我想记录每个数字在第二个文件中出现的次数。

例如,d.complex.1中的数字23可能在文件2中在不同的集合下出现了5次。我想要做的就是在文件2中记录第23个出现次数,包括所有文件集2。

我最初的方法是将它们加载到列表中并进行比较,但我无法实现这一点。我在谷歌搜索并遇到了集合,但作为一个python noob,我需要一些指导。任何人都可以帮助我吗?

如果您觉得问题不明确,请告诉我。我还在这里粘贴了完整的文件1和文件2:

http://pastebin.com/mwAWEcTa http://pastebin.com/DuXDDRYT

2 个答案:

答案 0 :(得分:2)

使用Python的open函数打开文件,然后遍历其所有行。检查该行是否包含数字,如果是,请按here所述的defaultdict实例增加其计数。

对另一个文件重复此操作并比较生成的dicts。

答案 1 :(得分:1)

首先创建一个可以加载给定文件的函数,因为您可能想要维护单个集合并且还想计算每个数字的出现次数,最好是为整个文件设置一个dict,其中键是设置名称,例如complex.1等,对于每个这样的集合保留另一个数字集合的字典,下面的代码解释得更好

def file_loader(f):
    file_dict = {}
    current_set = None
    for line in f:
        if line.startswith('d.complex'):
            file_dict[line] = current_set = {}
            continue

        if current_set is not None:
            current_set[line] = current_set.get(line, 0)

    return file_dict

现在您可以轻松编写一个函数,该函数将计算给定file_dict

中的数字
def count_number(file_dict, num):
    count = 0
    for set_name, number_set in file_dict.iteritems():
        count += number_set.get(num, 0)

    return count

例如这是一个用法示例

s = """d.complex.1
10
11
12
10
11
12"""

file_dict = file_loader(s.split("\n"))
print file_dict
print count_number(file_dict, '10')

输出是:

{'d.complex.1': {'11': 2, '10': 2, '12': 2}}
2

您可能需要改进文件加载器,例如跳过空行,转换为int等