Регулярное выражение Python Timestamp - PullRequest
2 голосов
/ 09 марта 2012

Может ли кто-нибудь помочь мне с моим кодом, где я записал данные из CSV-файла в список меток времени?Данные в списке в настоящее время отформатированы примерно так 03.08.2012 07.11.15 PM.И мне нужно только время 07:11:15, чтобы поместить в массив 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 (последний вызов был последним): файл "rate.py", строка 17,in match = regexp.match (timeStamp [x]) TypeError: ожидаемая строка или буфер

Ответы [ 2 ]

6 голосов
/ 09 марта 2012

Используйте взамен встроенный механизм синтаксического анализа отметки времени .

>>> 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'
1 голос
/ 09 марта 2012

row[7:8] - это список длиной 1, а не строка. regexp нужна строка. Вместо этого используйте row[7].

...