Python os.listdir没有提供一致的输出
我正在Linux Ubuntu 18.04上的Conda虚拟环境中使用Python 3.6.2 我尝试了几种方法来列出特定路径的文件和目录,但是我尝试的每种方法似乎都只列出目录中的文件,而不是文件和目录 我的代码包含Python os.listdir没有提供一致的输出,python,python-3.x,listdir,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-子样本_R1_001.fastq.gz', “170224-ARC12
directory_contents = os.listdir(run_directory)
print(directory_contents)
只显示
['170224-ARC122-1-uM-Cis-S1-子样本_R1_001.fastq.gz',
“170224-ARC122-1-uM-Cis-S1-子样本_R2_001.fastq.gz']
如果在listdir命令之前调用break,然后单步执行listdir命令,则变量将填充正确的内容
ipdb.set_trace()
print(directory_contents)
directory_contents = os.listdir(run_directory)
print(directory_contents)
***名称错误:未定义名称“目录内容”
['170224-ARC122-1-uM-Cis-S1-子样本_R1_001.fastq.gz','bw','Stats',',
“BWCHM”、“bg”、“170224-ARC122-1-uM-Cis-S1-子样本_R2_001.fastq.gz”,
'bgChrM','日志']
在listdir命令之后调用break
给予
['170313-ARC122-no-Cis-S5-子样本_R2_001.fastq.gz','170313-ARC122-no-Cis-S5-子样本_R1_001.fastq.gz']
我不理解的是什么,或者我忽略了哪些额外的关键字/参数?为什么我会得到不同的结果,这取决于我是在命令之前还是之后中断
这显然很简单,似乎不值得作为一个问题提出,但我已经没有解决方案了。您可以使用以下第一个结果: 输出:
./
['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()
返回一个生成器-因此它可能会查询到比您想要的更多的内容。没有这方面的截图,请复制并粘贴格式化代码(包括带有break
的代码段)。另外:如果您在之前中断,则在os.listdir(…)
将新内容放入其中之前获取变量的值,如果您在之后中断,您将获得新内容…当然,无论我在之前还是之后中断,我都应该获得相同的值。如果我在之前中断并手动运行该命令,我会得到X值,如果我在看到X值之后中断,我仍然只会得到os.WACK尝试输出中存在的文件。运行`for akt_dir,subdirs,os.walk(run_directory):print(akt_dir,subdirs,files)`@Liam然后你应该检查你到底在哪里-如果你所在的目录中有目录,你会得到它们和文件。您可能希望检查您的“目录”,看看它们是否实际上是符号链接,如果是,您可能需要使用参数调整os.walk(),以跟踪符号链接-请参阅并阅读感谢您的建议。如果我浏览到这些目录,我可以看到它们,而这些目录不是符号链接,它们是由另一个进程创建的。使用os.path.isdir
或isfile
返回True。我没有提到这是一个对象内部的方法。可能这与该特性有关。结果表明,在上一个异步命令之后,调用os.walk或os.listdir命令的时间太短。A time.sleep()导致返回正确的信息。
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']