【问题标题】:Python Timestamp Regular ExpressionPython时间戳正则表达式
【发布时间】:2012-03-09 16:09:54
【问题描述】:

在我将 csv 文件中的数据写入时间戳列表的代码中,有人可以帮助我吗?列表中的数据当前格式为 03.08.2012 07.11.15 PM。而且我需要将时间 07:11:15 PM 放入actTime 数组中。这是我的代码:

import csv
import re
reader = csv.reader(open('main.csv','rb'), delimiter=',',quotechar="'")
timeStamp = []
ask = []
regexp = re.compile('\d{2}:\d{2}:\d{4}')
actTime = []
x = 0
try:
    for row in reader:
        ask.append(row[5:6])
        timeStamp.append(row[7:8])
except csv.Error, e:
    sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
for item in timeStamp:
    actTime.append(timeStamp[x])
    match = regexp.match(timeStamp[x])
    if match:
        time = int(match.group[x])
    x = x + 1

这是我收到的错误消息:

Traceback(最近一次调用最后一次): 文件“rates.py”,第 17 行,在 匹配 = regexp.match(timeStamp[x]) TypeError: 预期的字符串或缓冲区

【问题讨论】:

  • timeStamp.append(row[7:8]) 中,您正在将仅包含一个元素的 lists 附加到 timeStamp 列表中。然后将此列表传递给regexp.match(),它需要一个字符串,而不是列表。您的意思是:timeStamp.append(row[7])

标签: python timestamp expression


【解决方案1】:

请改用built-in timestamp parsing mechanism

>>> import datetime
>>> t = "03.08.2012 07.11.15 PM"
>>> u = datetime.datetime.strptime(t, "%d.%m.%Y %I.%M.%S %p")
>>> u
datetime.datetime(2012, 8, 3, 19, 11, 15)
>>> u.strftime("%I:%M:%S %p")
'07:11:15 PM'

【讨论】:

    【解决方案2】:

    row[7:8] 是长度为 1 的列表,而不是字符串。 regexp 需要一个字符串。请改用row[7]

    【讨论】:

    • 如何将时间添加到新列表中?例如,我只希望 07:11:15 PM 在新列表中。谢谢。
    • 不同的问题,对吧?取决于您的时间戳是什么样的。您可能可以通过stamp[:11] 获得它(例如row[7][:11]
    猜你喜欢
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多