0

私の python スクリプトは、ファイルを順番に解析し、簡単なデータ クリーニングを行い、新しい csv ファイルに書き込みます。を使用してcsvいます。スクリプトの実行に非常に長い時間がかかります。

cProfile出力は次のとおりです。ここに画像の説明を入力

ここに質問を投稿する前に、多くのグーグル検索を行いました。

画像へのリンク画像へのリンク

ここにコードを追加すると、呼び出される関数

def db_insert(coCode, bse):
start = time()
q = []
print os.path.join(FILE_PATH, str(bse)+"_clean.csv");
f1 = open(os.path.join(FILE_PATH, str(bse)+"_clean.csv"))
reader = csv.reader(f1)
reader.next()
end = time()
# print end-start
for idx,row in enumerate(reader):
    ohlc = {}
    date = datetime.strptime( row[0], '%Y-%m-%d')
    date = row[0]
    row  = row[1:6]
    (op, high, low, close, volume) = row
    ohlc[date] = {}
    ohlc[date]['open'] = op
    ohlc[date]['high'] = high
    ohlc[date]['low'] = low
    ohlc[date]['close'] = close
    ohlc[date]['volume'] = volume
    q.append(ohlc)
end1 = time()
# print end1-end

db.quotes.insert({'bse':str(bse), 'quotes':q})
# print time()-end1
f1.close()
q = []
print os.path.join(FILE_PATH, str(coCode)+".csv");
f2 = open(os.path.join(FILE_PATH, str(bse)+"_clean.csv"))
reader = csv.reader(f2)
reader.next()
for idx,row in enumerate(reader):
    ohlc = {}
    date = datetime.strptime( row[0], '%Y-%m-%d')
    date = row[0]
    try:
        extra = row[7]+row[8]+row[9]
    except:
        try:
            extra = row[7]
        except:
            extra = ''
    row  = row[1:6]
    (op, high, low, close, volume) = row
    ohlc[date] = {}
    ohlc[date]['open'] = op
    ohlc[date]['high'] = high
    ohlc[date]['low'] = low
    ohlc[date]['close'] = close
    ohlc[date]['volume'] = volume
    ohlc[date]['extra'] = extra
    q.append(ohlc)
db.quotes_unadjusted.insert({'bse':str(bse), 'quotes':q})
f2.close()
4

1 に答える 1

8

この説明は、John Machin の回答で見つかりました。

ncalls は、ファイル内の文字/フィールド/行の数などの他のカウントと数値を比較すると、異常が強調される可能性があるという範囲でのみ関連します。tottime と cumtime が本当に重要です。cumtime は、呼び出した関数/メソッドで費やされた時間を含む、関数/メソッドで費やされた時間です。tottime は、呼び出した関数/メソッドで費やされた時間を除いた、関数/メソッドで費やされた時間です。

于 2014-12-02T22:27:34.077 に答える