我创建了一个函数,并希望将其应用于多个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多个文件,应该将其自动化 我将不胜感激
答案 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=';')