使用csv.DictReader,我想搜索一个字符串,然后打印包含该字符串的行

时间:2016-04-14 11:49:30

标签: python csv

我在Python中编写了一个小脚本来帮助我处理大型.csv文件,但我目前遇到了一些问题......

在程序的主程序中,它会提示用户输入,然后调用一个参考这些选项的函数,如...(仅显示选项一):

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

我通过在线跟踪一些事情来达到这一点但我现在陷入了困境。我一直在测试表中存在的ID,例如'ENSG00000210049',但是我收到错误消息:

NameError: name 'ENSG00000210049' is not defined

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您的主要问题是input功能。由于this

,您收到错误
  Python 2.7中的

输入函数,评估你输入的内容,作为a   Python表达式。如果您只想阅读字符串,请使用   Python 2.7中的raw_input函数,它不会评估读取   字符串。

     

如果您使用的是Python 3.x,则raw_input已重命名为input。   引用Python 3.0发行说明

但是,让我们给你一个很好的例子来解决你。

<强> 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

Python 3的示例代码

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'}