2014-01-16 90 views
0
a=['Business', 'Food/Clothes', 'Fun', 'Politics', 'Starting_with_Apolog', ['NNP', 'MD', 'NN', 'NNP'], ['NNP', 'NN', 'NNP'], ['PDT', 'MD', 'NN', 'NNP'], ['PRP$', 'MD', 'NN', 'NNP'], ['UH', 'MD', 'NN', 'NNP'], ['WP$', 'MD', 'NN', 'NNP'], 'end__with_ly', 'end_with_al', 'end_with_ful', 'end_with_ible', 'end_with_ic', 'end_with_ive', 'end_with_less', 'end_with_ous', 'sorry_word', 'Gender'] 

    f = open("file.csv") 
    reader = csv.reader(f) 
    headers = None 
    results = [] 
    for row in reader: 
     if not headers: 
      headers = [] 
      for i, col in enumerate(row): 
       if col in a: 
        # Store the index of the cols of interest 
        headers.append(i) 
      print headers  
     else: 
      results.append(list([row[i] for i in headers])) 
    return results 

上面的代码是一个从FILE.CSV在列表读取特定列,以便其结果将是在结果可用,但索引代码只会索引以下的列:如何从CSV读取列

** Fun 63 
** Food/Clothes 64 
** Politics 70 
** Business 73 
** end_with_al 75 
** end_with_ful 76 
** end_with_ible 77 
** end_with_ic 78 
** end_with_ive 79 
** end_with_less 80 
** end__with_ly 81 
** end_with_ous 82 
** sorry_word 83 
** Starting_with_Apolog 84 
** Gender 1487 

该代码不索引列表中的列表 - 我怎样才能让代码搜索它们呢? 注意:file.csv包含一些带有1487列的数据; a包含来自file.csv的一些列。

+0

你确定你使用细分离? – BenjaminB

+0

是的......当然...... – user104853

+1

“a”中的子列表有什么意义? – ForeverWintr

回答

1

为什么不直接删除列表中的列表?

'Starting_with_Apolog', ['NNP', 'MD', 'NN', 'NNP'] 

变化:

'Starting_with_Apolog', 'NNP', 'MD', 'NN', 'NNP' 

它是一种简单的技巧,但它可能是去做最简单的方法。

编辑

好了,所以既然你想列表结构,我相信你将不得不放弃一些性能之内离开该列表。我能想到的解决这个问题的下一个最简单的方法如下:

a=['Business', 'Food/Clothes', 'Fun', 'Politics', 'Starting_with_Apolog', ['NNP', 'MD', 'NN', 'NNP'], ['NNP', 'NN', 'NNP'], ['PDT', 'MD', 'NN', 'NNP'], ['PRP$', 'MD', 'NN', 'NNP'], ['UH', 'MD', 'NN', 'NNP'], ['WP$', 'MD', 'NN', 'NNP'], 'end__with_ly', 'end_with_al', 'end_with_ful', 'end_with_ible', 'end_with_ic', 'end_with_ive', 'end_with_less', 'end_with_ous', 'sorry_word', 'Gender'] 
newa = []  
for element in a: 
    if isinstance(element, list): 
     for el in element: 
      newa.append(el) 
    else: 
     newa.append(element) 
a = newa 
# Now use "a" or "newa" in the rest of your code. 

否则你if col in a:支票是会得到一大堆复杂得多...

希望这有助于!

0

您的问题是in不会自动测试列入a中的子列表。

>>> 'Fun' in a 
    True 
>>> 'NNP' in a 
    False 

>>> 'NNP' in a[5] #a[5] is the list ['NNP', 'MD', 'NN', 'NNP'] 
    True 
+0

@Dylan我想是列表 – user104853

+0

高清try_literal_eval(项目): 尝试: 回报ast.literal_eval(项目) 除(SyntaxError错误,ValueError异常): 回报项目 A = [try_literal_eval(项目= STR(项目)。用class_label替换(“”,“”)) print 打印一个 其实class_label包含列表...所以如何使用[i] – user104853