Как я могу запустить код через все мои CSV-файлы? - PullRequest
0 голосов
/ 09 июля 2019

Я создал функцию и хочу применить ее для нескольких файлов 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 Ответ

1 голос
/ 09 июля 2019

Вы можете использовать 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=';')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...