Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python os.listdir没有提供一致的输出_Python_Python 3.x_Listdir - Fatal编程技术网

Python os.listdir没有提供一致的输出

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

我正在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-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']