Python: извлекать файлы и перемещать файлы

#python #excel #csv #powerbi

#python #excel #csv #powerbi

Вопрос:

Я загрузил zip-файл с mailchimp. Zip-файл содержит папки и вложенные папки с файлами csv. Что я хотел бы сделать, так это написать программу, которая извлекла бы все файлы .csv в один каталог, а затем преобразовала их в файлы .xlsx.

В качестве альтернативы, если бы он просто копировал или заменял файлы .csv в те же каталоги, это нормально. Я хочу, чтобы они были источником для PowerBI. Я не смог использовать API для успешной интеграции с PowerBI.

У меня есть два сценария, которые я использовал, с разными проблемами. Как вы можете видеть ниже, я пытаюсь использовать скрипт, который успешно конвертирует файлы .csv, но заставляет его выполнять итерации по папкам и вложенным папкам.

Первый сценарий: проблема в том, что он не выполняет итерацию по файлам Excel в папках и вложенных папках. Он печатает «Текущая папка» и одновременно преобразует только файлы .csv в каталоге данных /Mailchimp.

 import shutil
#os.chdir('F:CRMMailchimp data')
for folderName, subfolders, filenames in os.walk('F:CRMMailchimp data'):
        print("The current folder is "   folderName)
        for csvfile in glob.glob(os.path.join('.', '*.csv')):
            workbook = Workbook(csvfile[:-4]   '.xlsx')
            worksheet = workbook.add_worksheet()
            with open(csvfile, 'rt', encoding='utf8') as f:
                reader = csv.reader(f)
                for r, row in enumerate(reader):
                    for c, col in enumerate(row):
                        worksheet.write(r, c, col)
            workbook.close()
  

Второй сценарий: та же проблема, он продолжает конвертировать файлы .csv в основной папке, но не будет проходить через другие папки и вложенные папки.

 entries = os.listdir('F:CRMMailchimp data')
for entry in entries:
            for csvfile in glob.glob(os.path.join('.', '*.csv')):
                workbook = Workbook(csvfile[:-4]   '.xlsx')
                worksheet = workbook.add_worksheet()
                with open(csvfile, 'rt', encoding='utf8') as f:
                    reader = csv.reader(f)
                    for r, row in enumerate(reader):
                        for c, col in enumerate(row):
                            worksheet.write(r, c, col)
                workbook.close()
  

Комментарии:

1. почему вы используете '.' в glob ? os.walk() и os.listdir() не изменяет активную папку и '.' всегда означает ту же основную папку. Вы должны использовать folderName вместо '.' в os.path.join(folderName, '*.csv') . То же самое с os.path.join(entry, '*.csv')

2. Несколько быстрых заметных вещей, которые вы можете проверить: 1. защитите пути Windows с помощью в строках, используя r префикс перед строковым литералом, иначе t , n и т.д. станут escape-последовательностями. 2. то, что сказал @furas, объединение пути с «.» ничего не делает, вы, вероятно, имели в виду что-то другое.