我使用pygtk和glade(python 2.7 32位解釋器是最近它支持)爲研究部門做一個應用程序,這需要抓住一堆數據從氣象站的csv輸出,並試圖擱置字典中的數據永久本地存儲。但是,我似乎無法爬過將日期和時間信息存儲到日期時間對象中的牆。無論有多少種不同的方法我嘗試抓取日期和時間字段(以字符串形式表示,例如:「2012年11月13日17:43」)並將其放入日期時間對象中,我也會遇到同樣令人討厭的錯誤:python CSV文件解析到日期時間,拋出時間格式錯誤
ValueError: time data '' does not match format '%m/%d/%Y %H:%M'
現在有問題的代碼,它是當點擊了UI一個按鈕的事件:
def Bupload_clicked(self,widget):
#Create a file chooser window, with default buttons
chooser = gtk.FileChooserDialog("Open . .", None, gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
response = chooser.run()
if response == gtk.RESPONSE_OK:
with open(chooser.get_filename(), 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter='\t', quoting=csv.QUOTE_NONE)
try:
for row in reader: #loop through rows of data
#here is the line of code in question:
print repr(datetime.datetime(*time.strptime(row[1], "%m/%d/%Y %H:%M") [:5]))
#rest of code doesn't work until this issue is fixed
except csv.Error as e:
sys.exit('file %s, line %d: %s' % (chooser.get_filename(), reader.line_num, e))
chooser.destroy()
我曾嘗試在不少不同的方式來完成這個任務,使用類似的問題在網絡上問了所有問題,包括將'/'換成' - ',將這一行代碼分成幾行,但似乎沒有解決這個問題。另外,在你認爲太困難之前的一個側面問題:strptime()的python文檔說它爲%m尋找[01,12],爲%H尋找[00,24],爲[01,31]尋找%d等,但氣象站的CSV文件留下了前導0。 (例如:「2/1/2013 0:43」)會導致錯誤?
從CSV文件中的原始數據(第5行):
1 11/13/2012 17:43 0 -0.2039 0 43.443 40.2 9.4 0 2.82 70.2 4.375
2 11/13/2012 18:43 0 -0.2039 0 36.651 61.1 0.6 0 0 74.4 4.363
3 11/13/2012 19:43 0 -0.1988 0 32.092 76.1 0.6 0 0.56 74.4 4.357
4 11/13/2012 20:43 0 -0.1988 0 31.591 74.5 0.6 0 1.12 92.7 4.357
5 11/13/2012 21:43 0 -0.1988 0 30.326 82.4 0.6 0 0 223.2 4.351
這裏是列表的「內存」表示:
#replace the problem line of code with: print row
['1', '11/13/2012 17:43', '0', '-0.2039', '0', '43.443', '40.2', '9.4', '0', '2.82', '70.2', '4.375']
['2', '11/13/2012 18:43', '0', '-0.2039', '0', '36.651', '61.1', '0.6', '0', '0', '74.4', '4.363']
['3', '11/13/2012 19:43', '0', '-0.1988', '0', '32.092', '76.1', '0.6', '0', '0.56', '74.4', '4.357']
['4', '11/13/2012 20:43', '0', '-0.1988', '0', '31.591', '74.5', '0.6', '0', '1.12', '92.7', '4.357']
['5', '11/13/2012 21:43', '0', '-0.1988', '0', '30.326', '82.4', '0.6', '0', '0', '223.2', '4.351']
請顯示文件內容的示例。 – 2013-04-07 23:37:29
你的代碼看起來很好,在CSV文件的某個地方稍後會出現一些問題。嘗試在處理它們之前打印行並查看哪一行拋出錯誤,或者捕獲錯誤並打印錯誤的行。 – 2013-04-07 23:48:40
不是它與問題相關,但可以直接從'datetime'使用'strptime':'datetime.datetime.strptime(row [1],「%m /%d /%Y%H:%M」) '。 – 2013-04-07 23:50:16