Как объединить несколько текстовых файлов в один CSV-файл в Python - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь преобразовать 200 текстовых файлов в CSV-файлы. Я использую код ниже, я могу запустить его, но он не производит CSV-файлы. Кто-нибудь может сказать какой-нибудь простой и быстрый способ сделать? Большое спасибо

dirpath = 'C:\Files\Code\Analysis\Input\qobs_RR1\\'
output = 'C:\Files\Code\Analysis\output\qobs_CSV.csv'
csvout = pd.DataFrame()
files = os.listdir(dirpath)

for filename in files:
    data = pd.read_csv(filename, sep=':', index_col=0, header=None)
    csvout = csvout.append(data)

csvout.to_csv(output)

1 Ответ

0 голосов
/ 30 марта 2020

Проблема в том, что ваш os.listdir дает вам список имен файлов внутри dirpath, а не полный путь к этим файлам. Вы можете получить полный путь, добавив dirpath к именам файлов с помощью функции os.path.join.

import os
import pandas as pd

dirpath = 'C:\Files\Code\Analysis\Input\qobs_RR1\\'
output = 'C:\Files\Code\Analysis\output\qobs_CSV.csv'
csvout_lst = []
files = [os.path.join(dirpath, fname) for fname in os.listdir(dirpath)]

for filename in sorted(files):
    data = pd.read_csv(filename, sep=':', index_col=0, header=None)
    csvout_lst.append(data)

pd.concat(csvout_lst).to_csv(output)

Редактировать: это можно сделать с помощью одной строки:

pd.concat(
    pd.read_csv(os.path.join(dirpath, fname), sep=':', index_col=0, header=None)
    for fname in sorted(os.listdir(dirpath))
).to_csv(output)

Редактировать 2: обновил ответ, поэтому список файлов отсортирован по алфавиту.

...