在Python中使用用户输入提取数据时出错
我正在尝试使用来自用户的输入来提取该日期范围内的数据的代码。我的日期是第23列(是的,我知道索引从0开始),在excel中的格式如下:1/1/2007 代码如下:在Python中使用用户输入提取数据时出错,python,excel,csv,datetime,input,Python,Excel,Csv,Datetime,Input,我正在尝试使用来自用户的输入来提取该日期范围内的数据的代码。我的日期是第23列(是的,我知道索引从0开始),在excel中的格式如下:1/1/2007 代码如下: import datetime if __name__ == '__main__': from_raw = raw_input('\nEnter FROM Date (e.g. 2013-11-29) : ') from_date = datetime.date(*map(int, from_raw.split('-
import datetime
if __name__ == '__main__':
from_raw = raw_input('\nEnter FROM Date (e.g. 2013-11-29) : ')
from_date = datetime.date(*map(int, from_raw.split('-')))
print 'From date: = ' + str(from_date)
to_raw = raw_input('\nEnter TO Date (e.g. 2013-11-30) : ')
to_date = datetime.date(*map(int, to_raw.split('-')))
in_file = './MyFileTest.csv'
for line in in_file:
fields = line.split(',')
found_date = datetime.date(*map(int, fields[23].split(' ')[23].split('-')))
if from_date <= found_date <= to_date:
print line
in_file.close()
我偶然使用了一些split命令split(“/”)来查看这是否有帮助,但由于它声称列表索引超出范围,代码的这一方面还不重要。如果您的代码是真正的未编辑复制粘贴,那么您的问题是:
fields[23].split(' ')[23].split('-')
这给了我们类似的东西:
what = fields[23].split(' ')
what = what[23].split('-')
因此索引错误出现在ẁ帽子[23].split()
显然是零件。你知道这个方法吗?在此情况下,您不得转换数据:
>>> datetime.datetime.strptime('2015-06-17', '%Y-%m-%d').date()
datetime.date(2015, 6, 17)
跟进其他答案:
是您的日期,格式为M字段[23]
D/
Y/
- 因此,
将为您提供单个组件的列表,您可以像最初一样使用这些组件来创建日期(但它们的顺序错误)fields[23]。split(“/”)
- 相反,您应该使用
将datetime.datetime.strtime
解析为日期,格式为字段[23]
“%m/%d/%Y”
- 我想问题在于我没有真正阅读我的文件 导致错误的是哪一行?
字段中有什么内容?(这是假设导致错误的是行计算found\u date
;您并不是真的这么说。)@ScottHunter抱歉,您是对的,导致错误的行是found\u date。我以为字段使用的是上面一行中的line.split(“,”),不是吗?是的,fields
就是这样计算出来的,但是里面有什么值呢?知道这一点将有助于确定如何处理它(记住,您还没有显示csv文件中的任何内容)。@ScottHunter我可能有点困惑。我以为我给字段的是csv的第23列,这是一列日期,格式如下:2007年1月2日。行的第23列中实际是什么导致错误的csv?因此索引错误发生在第二部分,但我该怎么做才能解决?谢谢你的回答!不幸的是,我仍然得到同样的错误。found_date=datetime.datetime.strptime(字段[23],%m/%d/%Y”)索引器:列表索引超出范围。由于您似乎不愿共享字段所包含的内容,因此您可以自行选择该字段,但如果该字段有23列,并且您的日期位于最后一列,则字段[22]或字段[-1]都可以工作。
>>> datetime.datetime.strptime('2015-06-17', '%Y-%m-%d').date()
datetime.date(2015, 6, 17)