如何在所有csv文件中运行代码?

时间:2019-07-09 07:35:02

标签: python-3.x loops

我创建了一个函数,并希望将其应用于多个csv文件。 我该怎么办?

我的文件名为

rec2018_039.db.csv or rec2018_040.db.csv

我想浏览此类文件进行计算并将其存储为以下名称的输出文件:

rv_km_2018_039.db.csv or rv_km_2018_040.db.csv

包含输入文件的编号应与输出文件的编号相同

import pandas as pd
import nearest_point as nearp
import numpy as np

filename_points = "F:\\merge_data_bases\\rec2018_039.db.csv"
out_filename_points = "F:\\trajectory\\river_km\\rv_km_2018_039.db.csv"
df = pd.read_csv(filename_points, delimiter=';')

df['river_km'], df['distance_to_ref_traj_meters'] = np.vectorize(nearp.river_km)(df['lat_deg'], df['lon_deg'], df['timestamp'])

'''
for index, row in df.iterrows():
    print(index, row.lat_deg, row.lon_deg)
    print(nearp.river_km(row.lat_deg, row.lon_deg)) 
'''

df.to_csv(out_filename_points, sep=';')

现在我手动更改了文件名,因为我有300多个文件,应该将其自动化 我将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以使用glob查找所需的文件。然后使用regex查找数字模式以创建您的输出文件。然后将其循环应用:

for file in glob.iglob("F:\\merge_data_bases\\*.db.csv"):
    r = re.search(".*?(\d+_\d+).db.csv$", file)
    if r:
        num = r.group(1)
    else:
        print("Wrong file encountered!")
        break
    outfile = "F:\\trajectory\\river_km\\rv_km_{}.db.csv".format(num)

    #  -----

    df.to_csv(outfile, sep=';')

由于我们已经在使用正则表达式来查找数字,所以我们也可以跳过以下内容:

for file in os.listdir("F:\\merge_data_bases"):
    r = re.search(".*?(\d+_\d+).db.csv$", file)
    if r:
        num = r.group(1)
        outfile = "F:\\trajectory\\river_km\\rv_km_{}.db.csv".format(num)

        #  -----

        df.to_csv(outfile, sep=';')