Перебирая файлы используя списки - PullRequest
0 голосов
/ 15 января 2019

У меня есть папка с псевдо-каталогом (/usr/folder/) файлов, которые выглядят так:

target_07750_20181128.tsv.gz
target_07750_20181129.tsv.gz
target_07751_20181130.tsv.gz
target_07751_20181203.tsv.gz
target_07751_20181204.tsv.gz
target_27103_20181128.tsv.gz
target_27103_20181129.tsv.gz
target_27103_20181130.tsv.gz

Я пытаюсь объединить вышеуказанные tsv-файлы в один xlsx-файл в коде хранилища (находится в именах файлов выше).

Я читаю, скажем, file.xlsx и читаю это как панду. Я извлек коды магазина из файла file.xlsx, поэтому у меня есть следующее:

stores = instore.store_code.astype(str).unique()

выход: * +1010 *

07750
07751
27103

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

import os

for store in stores:
    print(store)
    if store in os.listdir('/usr/folder/'):
        print(os.listdir('/usr/folder/'))

Результат, который я ожидаю увидеть, скажем, store_code in loop = '07750' будет:

07750    
target_07750_20181128.tsv.gz
target_07750_20181129.tsv.gz

Вместо этого я вижу только возвращенные коды магазина:

07750
07751
27103

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Проблема в том, что вы предполагаете поиск по подстроке - это не то, как 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 голосов
/ 15 января 2019

Причина вашего оператора 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 будет словарём со списком имен файлов для каждого номера магазина.

...