2012-03-09 10 views
2

csvファイルからtimeStampリストにデータを書き込んだコードを手伝ってくれる人がいますか?リストのデータは現在03.08.2012 07.11.15 PMのようにフォーマットされています。 actTimeアレイに入れるにはちょうど07:11:15 PMの時間が必要です。ここに私のコードは次のとおりです。ここでPythonタイムスタンプ正規表現

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 (most recent call last): File "rates.py", line 17, in match = regexp.match(timeStamp[x]) TypeError: expected string or buffer

+0

timeStamp.append(row [7:8])では、正確に1つの要素をtimeStampリストに追加しています。その後、このリストを 'regexp.match()'に渡します。これはリストではなく文字列を必要とします。あなたは 'timeStamp.append(row [7])'を意味しましたか? –

答えて

6

代わりに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' 
1

row[7:8]は、長さ1のリストではなく、文字列です。 regexpには文字列が必要です。代わりにrow[7]を使用してください。

+0

新しいリストに時間を追加するにはどうすればよいですか?たとえば、私は新しいリストで07:11:15 PMだけを望んでいます。ありがとうございました。 – scriptdiddy

+0

別の質問、そうですか?あなたのタイムスタンプがどのように見えるかによって異なります。おそらく 'stamp [:11]'(例えば 'row [7] [:11]')でそれを得ることができます – alexis