Динамически создавать папки и записывать CSV-файлы в эти папки - PullRequest
5 голосов
/ 04 апреля 2019

Я хотел бы прочитать несколько входных файлов из папки, выполнить некоторые преобразования, создать папки на лету и записать CSV-файл в соответствующие папки. Дело в том, что у меня есть входной путь, который похож на

«Входные файлы \ P1_set1 \ Set1_Folder_1_File_1_Hour09.csv» - для одного пациента (этот файл содержит показания пациента (P1) в 9-й час)

Аналогично, существует несколько файлов для каждого пациента, и файлы каждого пациента сгруппированы в каждой папке, как показано ниже

enter image description here

Итак, для чтения каждого файла я использую регулярное выражение с подстановочными знаками, как показано ниже в коде

Я уже пробовал использовать пакет glob и могу успешно его прочитать, но столкнулся с проблемой при создании папок вывода и сохранении файлов. Я анализирую строку файла, как показано ниже

f = "Входные файлы \ P1_set1 \ Set1_Folder_1_File_1_Hour09.csv"

f [12:] = "P1_set1 \ Set1_Folder_1_File_1_Hour09.csv"

filenames = sorted(glob.glob('Input files\P*_set1\*.csv'))
for f in filenames:
   print(f)     #This will print the full path
   print(f[12:]) # This print the folder structure along with filename
   df_transform = pd.read_csv(f)
   df_transform = df_transform.drop(['Format 10','Time','Hour'],axis=1)
   df_transform.to_csv("Output\" + str(f[12:]),index=False)

Я ожидаю, что в выходной папке будут файлы csv, сгруппированные по каждому пациенту в соответствующие папки. На приведенном ниже снимке экрана показано, как преобразованные файлы должны быть расположены в выходной папке (такая же структура, как входная папка). Обратите внимание, что папка «Output» уже существует (легко создать одну папку, которую вы знаете) enter image description here

1 Ответ

2 голосов
/ 04 апреля 2019

Таким образом, чтобы читать файлы в папке, используйте библиотеку os, тогда вы можете сделать

import os
folder_path = "path_to_your_folder"
dir = os.listdir(folder_path)
for x in dir:
    df_transform = pd.read_csv(f)
    df_transform = df_transform.drop(['Format 10','Time','Hour'],axis=1)
    if os.path.isdir("/home/el"):
        df_transform.to_csv("Output/" + str(f[12:]),index=False)
    else:
        os.makedirs(folder_path+"/")
        df_transform.to_csv("Output/" + str(f[12:]),index=False)    

Теперь вместо пользователя f [12:] разделите цикл x на for, как

file_name = x.split('/')[-1] #if you want filename.csv
* 1006.* Дайте мне знать, если это то, что вы хотели
...