Если вы хотите искать рекурсивно ( 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
, поскольку он возвращает итератор вместо списка.
Причина, по которой ваш оператор 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
будет словарём со списком имен файлов для каждого номера магазина.
Проблема в том, что вы предполагаете поиск по подстроке - это не то, как 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)
Это помогает?