Перебирая файлы используя списки

Если вы хотите искать рекурсивно ( Python 3.5 или выше ), вы можете сделать следующее:

import glob, os 
import pandas as pd

path = r'C:\user\your\path\**'
all_rec = glob.iglob(os.path.join(path, "*.csv"), recursive=True)     
dataframes = (pd.read_csv(f) for f in all_rec)
big_dataframe = pd.concat(dataframes, ignore_index=True)

Вы можете найти документацию ** здесь . Кроме того, я использовал iglob вместо glob, поскольку он возвращает итератор вместо списка.

1
задан martineau 15 January 2019 в 20:23
поделиться

2 ответа

Причина, по которой ваш оператор if терпит неудачу, состоит в том, что он проверяет, является ли «07750» и т. Д. Одним из имен файлов в каталоге, а это не так. Что вы хотите , так это посмотреть, если «07750» содержит , содержит в одном из имен файлов.

Я бы сказал так:

from collections import defaultdict
store_files = defaultdict(list)

for filename in os.listdir('/usr/folder/'):
    store_number = <some string magic to extract the store number; you figure it out>
    store_files[store_number].append(filename)

Теперь store_files будет словарём со списком имен файлов для каждого номера магазина.

0
ответ дан Lagerbaer 15 January 2019 в 20:23
поделиться

Проблема в том, что вы предполагаете поиск по подстроке - это не то, как in работает в списке. Например, на первой итерации ваш if выглядит следующим образом:

if "07750" in ["target_07750_20181128.tsv.gz",
               "target_07750_20181129.tsv.gz",
               "target_07751_20181130.tsv.gz",
               ...                            ]:

Строка «07755» не является , а элементом этого списка. Он выглядит как подстрока, но in не работает таким образом в списке. Вместо этого попробуйте это:

for filename in os.listdir('/usr/folder/'):
    if '_' + store + '_' in filename:
        print(filename)

Это помогает?

0
ответ дан Prune 15 January 2019 в 20:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: