Python os.listdir не дает последовательного вывода - PullRequest
0 голосов
/ 22 октября 2018

Я использую Python 3.6.2 в виртуальной среде Conda, в Linux Ubuntu 18.04.

Я пробовал несколько способов составить список файлов и каталогов определенного пути, но мне кажется, что каждый метод, который я пробуювыводить только файлы в каталоге, а не файлы и каталоги.

Мой код содержит

directory_contents = os.listdir(run_directory)
print(directory_contents)

, который показывает только

['170224-ARC122-1-uM-Cis-S1-subsample_R1_001.fastq.gz ',' 170224-ARC122-1-uM-Cis-S1-subsample_R2_001.fastq.gz ']

Если я вызываю перерывперед командой listdir , а затем пошагово с помощью команды listdir переменная заполняется правильным содержимым

ipdb.set_trace()
print(directory_contents)
directory_contents = os.listdir(run_directory)
print(directory_contents)

*** NameError: name'directory_contents' не определено

['170224-ARC122-1-uM-Cis-S1-subsample_R1_001.fastq.gz', 'bw', 'Stats', 'bwChrM', 'bg', '170224-ARC122-1-uM-Cis-S1-subsample_R2_001.fastq.gz ',' bgChrM ',' Log ']

Вызов перерыва после команды listdir

directory_contents = os.listdir(run_directory)
ipdb.set_trace()
print(directory_contents)

дает

['170313-ARC122-no-Cis-S5-subsample_R2_001.fastq.gz', '170313-ARC122-no-Cis-S5-subsample_R1_001.fastq.gz']

Что я не понимаю или какое дополнительное ключевое слово / аргумент я пропустил?Почему я получаю разные результаты в зависимости от того, сломался ли я перед командой или после?

Кажущаяся простота этого вряд ли стоит выдвигать как вопрос, но у меня закончились решения.

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать первый результат os.walk():

import os

# demo structure: 5 dirs, 5 files
for n in range(5):
    os.mkdir(f"dir_{n}")

for n in range (10,15):
    with open(f"file_{n}.txt","w") as f:
        f.write("...")

# query
akt_dir, subdirs, files = next(os.walk("./")) # get the first result of the generator
print(akt_dir)
print(subdirs)
print(files)

Выход:

./
['dir_0', 'dir_2', 'dir_3', 'dir_4', 'dir_1']
['file_14.txt', 'file_10.txt', 'file_12.txt', 'main.py', 'file_13.txt', 'file_11.txt']

os.walk() возвращает генератор - так что он можетзапросить больше, чем вы хотите.

...