Чтение и обработка файлов CSV по отдельности, вывод результатов в новые отдельные файлы - PullRequest
0 голосов
/ 02 августа 2020

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

Цель : читать сотни файлов CSV, один за другим, фильтровать каждый и выводить результат в файл, используя имя исходного файла в файле вывода / результата (например, «Обработано _ <<em> исходный_файл> .csv * ") *, затем перейдите к следующему файлу в l oop, прочтите и отфильтруйте его, поместите результаты для этого в новый вывод / результат файл. и так далее.

Проблема : Я либо сталкиваюсь с проблемой, когда создается только один файл результатов (из последнего прочитанного файла в l oop), либо если я использую код ниже, прочитав различные страницы SO, я получаю ошибку недопустимого аргумента.

Ошибка : OSError: [Ошибка 22] недопустимый аргумент: 'c: / users / my Directory / sourceFiles \ Processed_ c: / users / my Directory / sourceFiles \ files1.csv '

Я знаю, что сейчас неправильно меняю имя l oop и переименование, но не могу понять как это сделать, не загружая ВСЕ мои csvs в один фрейм данных с помощью list & concat и выводя все в один файл результатов (что не является моей целью) --- я хочу вывести каждый файл результатов в отдельные файлы, которые имеют общее имя исходного файла.

в идеале, учитывая размер и количество файлов (700+ каждый 400 МБ), я скорее использую Pandas, поскольку это кажется более эффективным из того, что я узнал до сих пор.

import pandas as pd
import glob
import os

path = "c:/users/my Directory/"
csvFiles = glob.glob( path + "/sourceFiles/files*")

for files in csvFiles:
     df = pd.read_csv(files, index_col=None, encoding='Latin-1', engine = 'python',     
          error_bad_lines = False)
     df_f = df[df.iloc[:, 2] == "Office"]
     filepath = os.path.join(path,'Processed_'+str(files)+'.csv')

     df_f.to_csv(filepath)

1 Ответ

0 голосов
/ 02 августа 2020

Сообщение об ошибке красивое, потому что оно показывает вам, что именно не так - ваше имя файла для сохранения вывода неверно, потому что c:/users/... повторяется дважды и объединяется вместе.

Попробуйте что-нибудь с os.path.basename() чтобы удалить расширение файла и путь:

fileout = path + '\\' + 'Processed_' + os.path.splitext(os.path.basename(files))[0] + '.csv'

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

import pandas as pd
import glob
import os

path = "c:/users/my Directory/"
csvFiles = glob.glob( path + "/sourceFiles/files*")

for files in csvFiles:
     print(files)
     #df = pd.read_csv(files, index_col=None, encoding='Latin-1', engine = 'python',     
          error_bad_lines = False)
     #df_f = df[df.iloc[:, 2] == "Office"]
     filepath = path + '\\' + 'Processed_' + os.path.splitext(os.path.basename(files))[0] + '.csv'
     print(filepath)
     #df_f.to_csv(filepath)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...