Python os.listdir 没有给出一致的输出
Python os.listdir is not giving consistent output
我在 Conda 虚拟环境中使用 Python 3.6.2,在 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 命令之前调用 break,然后单步执行 listdir 命令,变量将填充正确的内容
ipdb.set_trace()
print(directory_contents)
directory_contents = os.listdir(run_directory)
print(directory_contents)
*** NameError: name 'directory_contents' is not defined
['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 命令后调用 break
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']
我不明白什么或者我忽略了什么额外的 keyword/argument?为什么我会得到不同的结果,具体取决于我是在命令之前还是之后中断?
这个表面上的简单性似乎不值得提出问题,但我 运行 没有解决方案。
您可以使用 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()
returns 一个生成器 - 所以它可能会查询比你想要的更多。
我在 Conda 虚拟环境中使用 Python 3.6.2,在 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 命令之前调用 break,然后单步执行 listdir 命令,变量将填充正确的内容
ipdb.set_trace()
print(directory_contents)
directory_contents = os.listdir(run_directory)
print(directory_contents)
*** NameError: name 'directory_contents' is not defined
['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 命令后调用 break
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']
我不明白什么或者我忽略了什么额外的 keyword/argument?为什么我会得到不同的结果,具体取决于我是在命令之前还是之后中断?
这个表面上的简单性似乎不值得提出问题,但我 运行 没有解决方案。
您可以使用 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()
returns 一个生成器 - 所以它可能会查询比你想要的更多。