2016-01-13 65 views
0
  1. 为什么删除双引号不起作用? (国家=国家[1:-1])
  2. 为什么first_list.append行不能执行?我正在遍历输入文件的行并将它与存储在final_lists中的列表的第一个元素进行匹配。当我打印输出时,即使这两个值实际上与打印语句验证的相同(例如,行[0] ==津巴布韦和country ==津巴布韦),下一个附加语句也不会运行。

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

是什么数据是什么样子?任何不使用'csv'模块的原因,它可以明智地处理制表符分隔的文件。 – AChampion

+0

@AChampion来自输入文件的数据只是三列字符串。我没有使用csv模块,因为当我早些时候尝试这样做时,我无法弄清楚如何直接将它们分配给变量,如上所述(即,将每行指定为'region''subregion''国家'),而是不得不只是将每一行分配给列表 –

+0

'对于地区,分区域,国家在csv_reader:'将允许您迭代一个csv文件,将每行分配给变量'region','subregion''' country '。你能分享几行数据文件吗? – AChampion

回答

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