Python print lines.append()在循环if/else中
这是我的问题,我有两个文件,我想在其中读取和打印行。append(): 文件1:Python print lines.append()在循环if/else中,python,if-statement,append,Python,If Statement,Append,这是我的问题,我有两个文件,我想在其中读取和打印行。append(): 文件1: ID1 desc1 ID2 desc2 ID3 desc3 ID4 desc4 ID1 random1 ID5 random5 ID6 random6 ID1 random1 desc1 ID5 random5 desc5 ID6 randomI nothing address = {} with open('address.txt', 'r') as f: rows = (line.rstr
ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4
ID1 random1
ID5 random5
ID6 random6
ID1 random1 desc1
ID5 random5 desc5
ID6 randomI nothing
address = {}
with open('address.txt', 'r') as f:
rows = (line.rstrip().split('\t') for line in f)
address = { row[0]:row[1:] for row in rows }
for key, value in address.items():
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip('\n')
line = line.split('\t')
if line[0] == key:
line.append(str(address[key]))
print ('\t'.join(line))
else:
line.append('nothing')
print ('\t'.join(line))
文件2:
ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4
ID1 random1
ID5 random5
ID6 random6
ID1 random1 desc1
ID5 random5 desc5
ID6 randomI nothing
address = {}
with open('address.txt', 'r') as f:
rows = (line.rstrip().split('\t') for line in f)
address = { row[0]:row[1:] for row in rows }
for key, value in address.items():
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip('\n')
line = line.split('\t')
if line[0] == key:
line.append(str(address[key]))
print ('\t'.join(line))
else:
line.append('nothing')
print ('\t'.join(line))
我想要的是:
ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4
ID1 random1
ID5 random5
ID6 random6
ID1 random1 desc1
ID5 random5 desc5
ID6 randomI nothing
address = {}
with open('address.txt', 'r') as f:
rows = (line.rstrip().split('\t') for line in f)
address = { row[0]:row[1:] for row in rows }
for key, value in address.items():
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip('\n')
line = line.split('\t')
if line[0] == key:
line.append(str(address[key]))
print ('\t'.join(line))
else:
line.append('nothing')
print ('\t'.join(line))
但是,我当前的代码:
ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4
ID1 random1
ID5 random5
ID6 random6
ID1 random1 desc1
ID5 random5 desc5
ID6 randomI nothing
address = {}
with open('address.txt', 'r') as f:
rows = (line.rstrip().split('\t') for line in f)
address = { row[0]:row[1:] for row in rows }
for key, value in address.items():
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip('\n')
line = line.split('\t')
if line[0] == key:
line.append(str(address[key]))
print ('\t'.join(line))
else:
line.append('nothing')
print ('\t'.join(line))
但是,我得到了一个循环
ID1 random1 desc1
ID5 random5 nothing
ID6 randomI nothing
ID1 random1 nothing
ID5 random5 desc5
ID6 random6 nothing
另外,如果有人能建议最好的方法,放弃作为我字典末尾“值”的一部分打印的方括号,那就太好了。这样试试:
with open('address.txt') as fh1:
data1 = {j[0]: j[1] for j in [i.strip().split('\t') for i in fh1.readlines()]}
with open('families.txt') as fh2:
data2 = {j[0]: j[1] for j in [i.strip().split('\t') for i in fh2.readlines()]}
result = {k: [v, data1[k]] if k in data1 else [v, 'nothing'] for k, v in data2.items()}
我想你最好把每个文件都读入字典。不要重新读取“for”循环中的第二个文件 然后,创建第三个字典
address = { x: y for x, y in rows }
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip().split()
重复第1条:
for key, value in dict1.iteritems(): #python 2.7
或
然后,您可以创建第三个字典,它将使用相同的键,但值将是元组。对于迭代中的每个键,如果该键存在于dict1中,则元组的第一部分是值。如果它不存在,元组的第一部分是“nothing”。然后对第二个dict执行相同的操作,即第二个值
然后在dict2上迭代,并执行相同的操作;只需检查每把钥匙;如果它已经在新的dict中,不要处理它——它已经被处理了——继续
if key in new_dict:
continue
一旦你有了这个新的dict,你可以按你想要的方式格式化它。提供了很多格式选项。我删除了一些不必要的项目,希望能清理一些东西 我删除了对
'\n'
和'\t'
的引用,因为.rstrip()
和.split()
方法默认情况下会自动处理这些字符
with open('address.txt', 'r') as f:
rows = [line.rstrip().split() for line in f]
我利用for语句中的元素解包功能,将每行上的第一个和第二个项目解包为x
和y
值,以便插入到字典中
address = { x: y for x, y in rows }
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip().split()
在本例中,不需要在族文件中的行和地址字典中的项之间循环。字典是为查找关键字而优化的,因此我们只需在族文件上循环,并在字典中查找
if line[0] in address:
line.append(str(address[line[0]]))
print('\t'.join(line))
else:
line.append('nothing')
print('\t'.join(line))
文件1是“address.txt”,文件2是“families.txt”?你的问题没有说清楚。为什么要对address.items()中的键和值执行
:
?只需循环“families.txt”的内容,并使用每行的ID来测试它是否在地址
字典中。只需注意:在我看来,这只是在data2(families)中的项目上循环。如果data1(地址)中有项目不在data2(族)中,则不包括这些项目。从OP给出的示例来看,这似乎是可以的;只有OP知道这是否总是正确的。他说了他想得到什么,这就完成了工作:)正如我所说的,这符合这个例子。我只是觉得应该弄清楚它没有做什么,作为一个例子通常只是。。。