Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用用户输入提取数据时出错_Python_Excel_Csv_Datetime_Input - Fatal编程技术网

在Python中使用用户输入提取数据时出错

在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('-

我正在尝试使用来自用户的输入来提取该日期范围内的数据的代码。我的日期是第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('-')))
    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)

跟进其他答案:

  • 字段[23]
    是您的日期,格式为M
    /
    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)