在python3中,如何使for循环在输入为dir时获取所有文件,或在输入为文件时拾取文件

在python3中,如何使for循环在输入为dir时获取所有文件,或在输入为文件时拾取文件,python,python-3.x,Python,Python 3.x,在python3中,如果input是一个目录,那么它将从中获取所有的*.xml文件;如果input是一个文件,那么如何使for循环使用它 >>> dirs="foo" >>> for file in glob.iglob(r'{0}/**/*.xml'.format(dirs),recursive=True): ... print(file) ... foo/b.xml foo/c.xml foo/a.xml >>> dirs="fo

在python3中,如果input是一个目录,那么它将从中获取所有的*.xml文件;如果input是一个文件,那么如何使
for
循环使用它

>>> dirs="foo"
>>> for file in glob.iglob(r'{0}/**/*.xml'.format(dirs),recursive=True):
...    print(file)
... 
foo/b.xml
foo/c.xml
foo/a.xml
>>> dirs="foo/b.xml"
>>> for file in glob.iglob(r'{0}/**/*.xml'.format(dirs),recursive=True): #Here, how to make "file" to get foo/b.xml ??
...    print(file)
... 
>>> 

我可以用
if
条件来实现这一点,但是在
for()
中有没有方法可以实现呢?

所以如果一个文件是输入,你想用
for
循环做什么?如果是dir,那么我会对多个文件执行一些文件操作,如果输入是一个文件,那么我会对单个文件执行相同的操作。在你的例子中,如果它是一个
目录
,那么它将查找该
目录中的所有XML文件
;您希望在单个
文件上执行相同的功能
?for循环的
位置不正确
glob.iglob
可以,但不能,尝试用
foo/b.xml/***/.xml
识别
foo/b.xml
,主要是因为
***
只匹配0个或更多子目录;它不会在特定文件路径上查找父.Glob,只会返回一个包含该单一文件路径的列表,因此,无论最终文件路径是否使用通配符,这都是安全的。
if/else
可以折叠为单个
if
如果
your\u path\u here=os.path.join…
而不是创建新变量。我提供了这个方法,这样我们就不会重复使用变量名,而不是每个人都喜欢这样做
import os, glob

if os.path.isdir(your_path_here):
    xml_files = os.path.join(your_path_here, '**', '*.xml')

else:
    xml_files = your_path_here

for file in glob.iglob(xml_files):
    # Do something