Python os.listdir没有给出一致的输出

时间:2018-10-22 09:51:03

标签: python python-3.x listdir

我正在Linux Ubuntu 18.04的Conda虚拟环境中使用Python 3.6.2。

我尝试了几种方法来列出特定路径的文件和目录,但是我尝试的每种方法似乎都只列出目录中的文件,而不是文件和目录。

我的代码包含

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:未定义名称“ 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 :(得分:1)

您可以使用 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()返回一个生成器-因此它可能会查询更多您想要的内容。