我想搜索.csv文件并返回包含范围

时间:2016-04-14 13:58:24

标签: python csv

我有一个.csv文件,看起来有点像:

ID, Start, End
1, 1, 20,
2, 25, 40,
3, 67, 100

我的代码的主要功能然后提示用户选择一些选项(我只显示了我对此感兴趣的选项):

def Main():

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

    if response == 2:
        Begin = raw_input('Start coordinate: ')
        End = raw_input('End coordinate: ')
        Return_all(Begin, End)

正如你所看到的那样,主要根据用户的选择调用一个函数。通过这个特殊功能,我想打印“ID' start和end值在

范围内的所有行的值
def Return_all(start, end):
    file_csv = csv.DictReader(open('csv_file.csv'))
    Start = int(start)
    End = int(end)
    for row in file_csv:
        if row['Start'] == range(Start, End):
            print row['ID']

最终,分别给出1和45的开始和结束坐标,我喜欢这个程序,然后将ID 1和2打印到控制台。给定坐标为25和200,我希望它只打印ID 2和3,依此类推。

但是,这似乎并不像预期的那样有效,虽然我没有收到任何错误,但我也没有看到打印到控制台的任何内容。是否有人能够提出更好的选择来实现我的需求?

干杯

1 个答案:

答案 0 :(得分:0)

使用csv模块时,所有条目都被视为字符串,因此您需要先将值转换为整数,如下所示:

import csv

def Return_all(start, end):
    with open('csv_file.csv', 'rb') as f_input:
        csv_input = csv.DictReader(f_input, skipinitialspace=True)

        for row in csv_input:
            csv_start = int(row['Start'])

            if start <= csv_start <= end:
                print row['ID']

Return_all(1, 45)           
print
Return_all(25, 200) 

这会显示:

1
2

2
3