2016-04-14 55 views
2

我已经在Python中编写了一个小脚本来帮助我处理一个大的.csv文件,但我目前有几个问题...使用csv.DictReader,我想搜索一个字符串,然后打印包含该字符串的行

在主节目的它提示输入用户,然后调用参照这些选项,像这样...(仅示出一个选项)的函数:

def Main(): 
    response = input('1, 2 or 3? ') 

    if response == 1: 
     ID = input('Enter your ID: ') 
     Response_one(ID) 

这功能Response_one然后打开文件,我希望它通过搜索并找到用户输入的ID变量在.csv,打印该行之前。到目前为止,我有这样的事情:

def Response_one(ID): 
    file_csv = csv.DictReader(open('my_file.csv')) 
    for row in file_csv: 
     if row['ID'] == ID: 
      print row 

我到了这一点,在网上几件事情,但我现在卡住了。我一直在用,我知道该表中存在诸如“ENSG00000210049”的ID进行测试,但我得到的错误信息:

NameError: name 'ENSG00000210049' is not defined 

任何帮助将非常感激。

+0

你能后的CSV一些示例数据? – Mani

+0

你使用Python 2.x还是3.x?在这些版本中'input()'是不同的。 –

+0

嘿,我使用的Python 2.x和我的表看起来有点像; ID,基因,蛋白质 1,X1,X2 2,X3,X4 我道歉了可怕的表,它似乎计算器不支持表.. –

回答

4

您的主要问题是input函数。你得到,因为this错误:

输入功能在Python 2.7,评估无论您输入,作为 Python表达式。如果您只想读取字符串,那么请在Python 2.7中使用 raw_input函数,该函数不会评估读取的 字符串。

如果您使用Python 3.x,则raw_input已被重命名为输入。 引用python 3.0发行说明


但是让我们给你一个很好的例子,你理清。用于Python 3

data.csv

ID,DATA 
1,a 
2,b 
3,c 

用于Python 2示例代码

id = raw_input('what id?: ') 
with open('data.csv', 'rb') as f: 
    for row in csv.DictReader(f): 
     if row['ID'] == id: 
      print row 

示例代码

id = input('what id?: ') 
with open('data.csv', 'rb') as f: 
    for row in csv.DictReader(f): 
     if row['ID'] == id: 
      print row 

what id?: 1 
{'ID': '1', 'DATA': 'a'} 
+0

真棒,这是伟大的工作。 –

+0

非常好,如果您觉得它回答了您的问题,您可以接受我的答案。 (我只提醒你,因为你是一个新用户) –

+0

:P np,我实际上正在努力寻找'接受'按钮。非常感谢 –

相关问题