直接看代码

import multiprocessing
import glob
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("postgresql://postgres@localhost:5432/vnpy")


def save_bar(filename):
    vt_symbol = filename.split("_")[0]
    symbol, exchange = vt_symbol.split(".")
    df = pd.read_csv(
        filename,
        compression="gzip",
        parse_dates=True,
        skiprows=1,
        names=[
            "datetime",
            "open_price",
            "high_price",
            "low_price",
            "close_price",
            "volume",
            "open_interest",
        ],
    )
    df["symbol"] = symbol
    df["exchange"] = exchange
    df["interval"] = "1m"
    print(df.head(1))
    df.to_sql("dbbardata", engine, if_exists="append", index=False)


if __name__ == "__main__":
    all_files = glob.glob("*csv.gz")
    pool = multiprocessing.Pool(
        min(len(all_files), multiprocessing.cpu_count()), maxtasksperchild=1
    )
    results = []
    for file_name in all_files:
        res = pool.apply_async(save_bar, args=(file_name,))
        results.append(res)
    [res.get() for r in results]

数据格式为

open	high	low	close	volume	open_interest
2010/4/16 9:16	3450	3488	3450	3470	490	359
2010/4/16 9:17	3468	3473	3467	3467	306	521
2010/4/16 9:18	3467	3471	3466	3467	198	630
2010/4/16 9:19	3467	3468	3448	3448	282	764
2010/4/16 9:20	3448	3460	3448	3454	248	795
2010/4/16 9:21	3454	3456	3454	3456	109	841
2010/4/16 9:22	3457	3458	3456	3458	165	908
2010/4/16 9:23	3459	3460	3455	3455	206	980
2010/4/16 9:24	3455	3455	3450	3454	196	1020
2010/4/16 9:25	3454	3457	3453	3456	137	1076

文件名为: SYMBOL.EXCHANGE_2010_2019.csv.tar.gz