大きなCSVファイルを小さなチャンクファイルにチャンクするスクリプトを作成中です。チャンクされた最後のタイムスタンプを保持するログファイルを相互参照して、ログに記録された時刻より後のタイムスタンプのみが書き込まれる/チャンクされるようにします。
csvファイルの最初の列には、%Y%m%d %H%M%S
形式のタイムスタンプがあります。CSVファイルには、スクリプトで不要/不要な4行のヘッダー情報も含まれていますが、このrows in ts_pre
句から削除されます。
このlog_lookup()
関数は、私が表示している特定のステーションのCSVファイルのログから最後の時系列を取得するだけです。明らかに、2番目の段落で説明したのと同じ構造を共有していることを除いて、すべて異なる列の情報を持つ6つの異なるステーションで作業しています。
部分的なスクリプトは次のとおりです。
import csv, sys, datetime
def log_lookup():
global STN_num
global STN_date
with open('/home/log.txt', 'rb') as open_log:
log_file = csv.reader(open_log)
for row in log_file:
for item in row:
STN_date.append(item)
if find == 'STN_1':
return STN_date[1]
if find == 'STN_2':
return STN_date[2]
if find == 'STN_3':
return STN_date[3]
if find == 'STN_4':
return STN_date[4]
if find == 'STN_5':
return STN_date[5]
if find == 'STN_6':
return STN_date[6]
def get_ts(line):
print line[0:19]
return datetime.datetime.strptime(line, "%Y/%m/%d %H:%M:%S")
def main():
log = str(log_lookup()) #useful for knowing when to start chunking
log_datetime = datetime.datetime.strptime(log, "%Y/%m/%d %H:%M:%S")
with open(sys.argv[1], 'rb') as open_file:
ts_from_file = csv.reader(open_file)
for genrows in ts_from_file:
ts_pre.append(genrows)
for rows in ts_pre:
if rownum < 4:
ts_pre.pop()
rownum += 1
else:
for line in rows:
if get_ts(line) > log_datetime:
timeseries.append(line)
ログファイルは単純です。
0
2011/10/06 18:40:00
2012/06/27 13:25:00
1900/01/01 00:00:00
2011/08/03 14:55:00
2012/06/27 20:05:00
2011/10/03 19:25:00
...プレースホルダーとして0を使用します。(私がプログラマーではないことは明らかですか?)
CSVファイルの例は次のようになります。
"2011/10/03 16:40:00",0,0
"2011/10/03 16:45:00",1,0
"2011/10/03 16:50:00",2,0
"2011/10/03 16:55:00",3,0
ts_line(line)
関数が言っているときに私が得ているエラーは次のline[0:19]
とおりです:
2011/10/03 16:40:00
0
関数が戻り0
、Pythonは次のエラーをスローします。
ValueError: time data '0' does not match format '%Y/%m/%d %H:%M:%S'
返されるものがCSVファイルの2番目の項目であることを確認しました0
が、Pythonがスライス選択でそれを返す理由について混乱しています。誰かがその値を返す理由と、タイムスタンプを取得してログのタイムスタンプと比較するために何をする必要があるのかを説明できますか?
追加のクレジットとして、コーディング/スタイルに関するアドバイスや、より良い方法に関するアドバイスは、私がやっていることを達成するために常に高く評価されています。私が見ているCSVファイルは非常に大きい(〜8 MB)ので、効率が高いほど良いです。