Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个文本文件以删除较长文本文件的重复_Python_File_Comparison - Fatal编程技术网

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

Python 比较两个文本文件以删除较长文本文件的重复,python,file,comparison,Python,File,Comparison,我有两个文件,一个包含由制表符分隔的数据列表,另一个包含一个字段的条目id列表。我想将较大文件(file1)中的每个第一个字段与最小文件(file2)中的所有行/项id进行比较,然后如果第二个文件中不存在比较的id,我想将与第一个文件中的比较项相关的所有信息写入第一个文件(由制表符分隔的行内容)。我尝试了下面的代码,但它对for循环有问题。第一个循环不会增加,而第二个循环会循环所有第二个文件行。另外,我希望项目编号被写入一次,这是If语句中的一个问题 for lines in alldata:

我有两个文件,一个包含由制表符分隔的数据列表,另一个包含一个字段的条目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

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

keys_dict = {}
f = open('smallfile.txt','r')
for line in f.readlines():
    keys_dict[line] = 1
f.close()
我不是这里的超级巨蟒,但你应该明白我的意思

然后当你阅读你的大文件时,检查一下


如果键中的第一列值为dict:

我建议使用以下伪代码。检查id文件1是否在id文件2中的python方法是从文件2中获得id列表,并说
如果id在idlist:

假设您已将第二个文件的所有ID读取到列表
idlist\u 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)

这将为您提供一个良好的起点。

查看您的文件内容示例将非常有帮助。另外,您能否为文件的大小指定一个指针?它们是否足够小,可以存储在内存中?文件大小不同,因为我使用的数据大小不同,对于大文件,最小大小为50KB,有些文件超过5MB。较小的文件最大为20KB。为了匹配,我将在字典中遇到\r\n问题。您可以使用string.replace(“\r\n“,”)或strip(“\r\n”)删除它们