2015-06-17 48 views
-1
提取數據

我嘗試使用來自用戶的輸入,以拉該日期範圍內的數據代碼。我的日期是23列(是的,我知道該指數從0開始),並在Excel的格式,像這樣:1/1/2007獲取錯誤使用用戶輸入時用Python

下面是代碼:

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() 

不過,我得到一個IndexError:列表索引超出我的代碼範圍。如果我將23更改爲0,則我會在基數爲10時得到錯誤值ValueError:int()的無效字面值:'。'

有誰知道是怎麼回事,如何解決?

第23欄(在Excel列索引X)是這樣的:

receiveddate 
1/1/2007 
1/1/2007 
1/1/2007 
1/2/2007 
1/2/2007 
1/2/2007 
1/2/2007 
1/2/2007 
1/2/2007 
1/2/2007 
12/28/2006 
12/29/2006 
12/29/2006 
1/2/2007 

我偶然一些分裂的命令拆分(「/」),看看是否會幫助,但因爲它聲稱那列表索引超出範圍,代碼的這方面並不重要。

+0

導致錯誤的行是什麼? '田地'裏有什麼? (這是假設它是行計算'found_date'是導致錯誤的那個;你不真的說。) –

+0

@ScottHunter對不起,你是對的,導致錯誤的行是found_date。我認爲領域是從上面的行使用line.split(','),不是? – jenryb

+0

是的,這就是'字段'如何計算的,但是*值*會在那裏發生什麼?知道這將有助於確定要做什麼*(請記住,您沒有顯示任何關於您的csv文件的內容)。 –

回答

0

如果你的代碼是一個真正的未經編輯複製粘貼,這裏是你的問題:

fields[23].split(' ')[23].split('-') 

哪個分解給了我們這樣的:

what = fields[23].split(' ') 
what = what[23].split('-') 

所以指數誤差是在ẁhat[23].split()部分明顯。

+0

因此,第二部分發生索引錯誤,但我該如何解決這個問題? – jenryb

0

您瞭解datetime.datetime.strptime方法?有了這個,你一定不要將您的數據:

>>> datetime.datetime.strptime('2015-06-17', '%Y-%m-%d').date() 
datetime.date(2015, 6, 17) 
0

跟進其他答案:

  • fields[23]是你的約會,在形式中號/d/Ÿ
  • 因此fields[23].split("/")會給你一個單獨的組件列表,你可以使用它作爲你原來做一個日期(但他們在錯誤的順序)
  • 相反,你應該使用datetime.datetime.strptime解析fields[23]爲日期,使用格式"%m/%d/%Y"
+0

謝謝你的回答!不幸的是,我仍然得到同樣的錯誤。 found_date = datetime.datetime.strptime(fields [23],「%m /%d /%Y」) IndexError:列表索引超出範圍。 – jenryb

+0

既然你似乎很不願意分享哪些字段包含,你自己在那一個,但如果它有23列,並且你的日期在最後一個,那麼無論是字段[22]或字段[-1 ] 應該管用。 –

0

我認爲,問題是,我實際上並沒有讀我文件。