比较两个文本文件以删除较长文本的重复

时间:2014-11-02 06:39:03

标签: python file comparison

我有两个文件,一个包含由制表符分隔的数据列表,第二个文件包含项目ID的列表,即一个字段。我想比较较大文件(file1)中的每个第一个字段与最小文件(file2)中的所有行/项id,然后如果第二个文件中不存在比较的id我想写所有相关的信息第一个文件中的比较项(由选项卡分隔的行内容)。我尝试了下面的代码,但它有for循环的问题。第一个循环不会增加,而第二个循环则循环所有第二个文件行。此外,我希望项目编号写入一次,这是If语句中的问题。

for lines in alldata:
  for lines1 in olddata:
    old_data=lines1.split('\r\n')
    dataId=old_data[0]
    data=lines.split('\t')
    photoid=data[0]
    if photoid==dataId:

     break

    else:
     #continue
     #print('matching',lines)
     #break
      w=open(head+'......................../1.txt','a')
      w.write(lines)  

这是文件结构的示例:

15463774518 2014-10-28 08:12:31 2014-10-28 13:12:31 
15628560471 2014-10-26 07:40:28 2014-10-26 12:40:28 
15444098878 2014-10-26 04:49:19 2014-10-26 09:49:19 
15437269197 2014-10-25 09:55:11 2014-10-25 15:55:11 

小文件看起来像:

139747955
2417570005
2478707302
1808883457
211514265

2 个答案:

答案 0 :(得分:0)

我很想将第二个文件加载到字典中,然后解析第一个文件并尝试将第一行与字典键匹配

keys_dict = {}
f = open('smallfile.txt','r')
for line in f.readlines():
    keys_dict[line] = 1
f.close()

我不是这里的超级蟒蛇,但你应该明白这个想法。

然后当您阅读大文件时,请检查

if first_column_value in keys_dict:

答案 1 :(得分:0)

我建议遵循伪代码。检查id文件1是否在id文件2中的pythonic方法是从文件2中获取id列表并说出if id in idlist:

我们假设您已将第二个文件的所有ID读取到列表idlist_file2。 然后你读了一个文件。解析你的行,然后检查

with open(file1,'r') as f:
    for line in f:
        data = parse_line(line) # function according to your data format, either return a dict or a tuple what ever works best for you
        if date['id'] not in idlist_file2:
             do_something_with_this_info(data)

这应该给你一个很好的起点。