我有一个.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,依此类推。
但是,这似乎并不像预期的那样有效,虽然我没有收到任何错误,但我也没有看到打印到控制台的任何内容。是否有人能够提出更好的选择来实现我的需求?
干杯
答案 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