2

我正在使用 pygtk 和 glade(python 2.7 32bit 解释器是它支持的最新版本)为研究部门制作应用程序,这需要从气象站的 csv 输出中获取一堆数据并尝试将这些数据搁置在用于永久本地存储的字典。但是,我似乎无法爬过将日期和时间信息存储到 datetime 对象的墙。无论我尝试以多少不同的方式获取日期和时间字段(表示为字符串 ex:"11/13/2012 17:43")并将其放入 datetime 对象中,我都会遇到同样烦人的错误:

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],为 %d 寻找 [01,31],等等. 但是气象站的 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']
4

1 回答 1

2

问题不在于您的格式字符串。错误信息

ValueError: time data '' does not match format '%m/%d/%Y %H:%M'

表示您正在尝试将空字符串转换为时间。换句话说,对于文件的至少一行,您row[1] == ''实际上是在调用time.strptime('', '%m/%d/%Y %H:%M').

于 2013-04-07T23:55:58.913 回答