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