Объединение файлов с похожим соглашением имен с фреймом - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть список файлов, хранящихся в каталоге, таких как

filenames=[
        abc_1.txt
        abc_2.txt
        abc_3.txt

        bcd_1.txt
        bcd_2.txt
        bcd_3.txt
       ]

pattern=[abc]

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

Мой код:

file_path = '/home/iolie/Downloads/test/'
filenames = os.listdir(file_path)


prefixes = list(set(i.split('_')[0] for i in filenames))

for prefix in prefixes:
    print('Reading files with prefix:',prefix)
    for file in filenames: 
        if file.startswith(prefix):
            print('Reading files:',file)
            list_of_dfs = [pd.concat([pd.read_csv(os.path.join(file_path, file), header=None) ],ignore_index=True)]
            final = pd.concat(list_of_dfs)

Этот код не добавляется, а перезаписывает фрейм данных. Может ли кто-нибудь помочь с этим?

1 Ответ

0 голосов
/ 05 ноября 2018

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

from collections import defaultdict

filenames = ['abc_1.txt', 'abc_2.txt', 'abc_3.txt',
             'bcd_1.txt', 'bcd_2.txt', 'bcd_3.txt']

dd = defaultdict(list)

for fn in filenames:
    dd[fn.split('_')[0]].append(fn)

dict_of_dfs = {}
for k, v in dd.items():
    dict_of_dfs[k] = pd.concat([pd.read_csv(fn) for fn in v], ignore_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...