输入文件比较不起作用Python

时间:2016-01-13 05:33:33

标签: python

  1. 为什么删除双引号不起作用? (country = country [1:-1])
  2. 为什么first_list.append行没有执行?我循环输入文件的行并将其与存储在final_lists中的列表列表的第一个元素进行匹配。当我打印输出时,即使两个值实际上是由print语句验证的(例如,当row [0] ==津巴布韦和国家= =津巴布韦时),下一个追加语句也不会运行。
  3. 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
    

1 个答案:

答案 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