first_list.append
行没有执行?我循环输入文件的行并将其与存储在final_lists中的列表列表的第一个元素进行匹配。当我打印输出时,即使两个值实际上是由print语句验证的(例如,当row [0] ==津巴布韦和国家= =津巴布韦时),下一个追加语句也不会运行。with open('world_bank_regions.tsv', 'rU') as f:
next(f)
for line in f:
[region, subregion, country] = line.split('\t')
if country.startswith('"') and country.endswith('"'):
country = country[1:-1]
print country #the double quotes remain
for row in final_list: #final list is a list of lists
print row[0] #row[0] == Zimbabwe
print country #country == Zimbabwe
if row[0] == country:
final_list.append([region, subregion])
print final_list #no changes were made to the list from the previous steps
答案 0 :(得分:0)
您可以使用csv
模块解决大部分问题。您遇到的第二个问题是您正在修改循环的相同列表。这绝不是一个好主意。
解决您的第一个问题:
import csv
with open('world_bank_regions.tsv', 'rU') as f:
reader = csv.DictReader(f, delimiter='\t', quotechar='"')
for row in reader:
print(row['Country'])
对于您的第二个问题,您可以采用两种方式。第一种是使用国家/地区名称作为密钥将其转换为快速查找字典。
由于国家/地区名称是内部列表中的第一个条目,您可以执行以下操作:
lookup = {i[0]: i for i in final_list}
然后您的完整代码如下所示:
import csv
lookup = {i[0]: i for i in final_list}
with open('world_bank_regions.tsv', 'rU') as f:
reader = csv.DictReader(f, delimiter='\t', quotechar='"')
for row in reader:
if row['Country'] in lookup.keys():
lookup[row['Country']] += [row['Region'], row['Subregion']]
csv.DictReader
获取第一行,并将它们用作剩余行中数据的键,并在循环时返回一个字典。
上面的示例假设您的输入文件如下所示:
Country\tRegion\tSubregion
Zimbabwe\tAfrica\t