我有两个文件,一个包含由制表符分隔的数据列表,第二个文件包含项目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
答案 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)
这应该给你一个很好的起点。