Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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 获取目录中所有文件的绝对路径_Python_Absolute Path - Fatal编程技术网

Python 获取目录中所有文件的绝对路径

Python 获取目录中所有文件的绝对路径,python,absolute-path,Python,Absolute Path,如何获取Python中可能有多个子文件夹的目录中所有文件的绝对路径 我知道os.walk()递归地给我一个目录和文件列表,但这似乎并不能满足我的需要 如果给定给的参数是绝对的,那么在迭代过程中生成的根目录名称也将是绝对的。因此,您只需使用以下文件名将它们连接起来: import os for root, dirs, files in os.walk(os.path.abspath("../path/to/dir/")): for file in files: print

如何获取Python中可能有多个子文件夹的目录中所有文件的绝对路径

我知道
os.walk()
递归地给我一个目录和文件列表,但这似乎并不能满足我的需要

如果给定给的参数是绝对的,那么在迭代过程中生成的根目录名称也将是绝对的。因此,您只需使用以下文件名将它们连接起来:

import os

for root, dirs, files in os.walk(os.path.abspath("../path/to/dir/")):
    for file in files:
        print(os.path.join(root, file))

您可以使用
os.path.abspath()
将相对路径转换为绝对路径:

file_paths = []

for folder, subs, files in os.walk(rootdir):
  for filename in files:
    file_paths.append(os.path.abspath(os.path.join(folder, filename)))
确保路径是绝对的。使用以下辅助函数:

import os

def absoluteFilePaths(directory):
    for dirpath,_,filenames in os.walk(directory):
        for f in filenames:
            yield os.path.abspath(os.path.join(dirpath, f))
尝试:


我希望保留子目录的详细信息,而不是文件,并且只希望子目录中有一个xml文件。我可以这样做:

for rootDirectory, subDirectories, files in os.walk(eventDirectory):
  for subDirectory in subDirectories:
    absSubDir = os.path.join(rootDirectory, subDirectory)
    if len(glob.glob(os.path.join(absSubDir, "*.xml"))) == 1:
      print "Parsing information in " + absSubDir

如果您有Python 3.4或更新版本,则可以使用(如果您有较旧的Python版本,则可以使用第三方后端口):

从全局导入全局
def绝对文件路径(目录):
返回全局(加入(目录“**”)
所有文件和文件夹:

x=[os.path.abspath(os.path.join(directory,p))代表os.listdir(directory)中的p]
图像(.jpg |.png):

x=[os.path.abspath(os.path.join(directory,p)),如果p.endswith(('jpg','png'))在os.listdir(directory)中为p
试试:


从python 3.5开始,惯用的解决方案是:

import os

def absolute_file_paths(directory):
    path = os.path.abspath(directory)
    return [entry.path for entry in os.scandir(path) if entry.is_file()]
这不仅读起来更好,而且在许多情况下速度更快。 有关更多详细信息(如忽略符号链接),请参阅原始python文档:

您能举例说明您期望的输入和输出是什么吗?当您想加入
文件夹时,是否将
cwd
加入
filename
?!我认为在
os.walk
行上只做一次ABSPACH比在有效的循环中做N次要好,但这只是“意外”。阅读
os.path.join
的契约,我找不到任何地方可以保证结果是绝对的,如果其中一个参数是绝对的,尽管这是一个合理的假设。结尾有一个多余的括号。应该是yield os.path.abspath(os.path.join(dirpath,f))@jumbopp谢谢你的提示,修复了。@phihag这很可靠。这不是“意外”,语言也不太正式,文件中没有“合同”的概念。有文档记载,如果一个组件是绝对路径,那么之前的所有组件都将被丢弃,并从绝对路径组件继续连接。Python无法在这里无形地转换为相对路径,如果不进行巨大的向后破坏性更改,就不可能修改行为。如果仍然不确定,您甚至可以阅读
os.path.join
的源代码,它既短又简单。是否要在不捕获隐藏文件的情况下执行此操作?@MarcelMarino
如果不是file.startswith('.')
好的,我明白您的意思,只是我不想要这些文件,而是想要特定的子目录。我已经发布了下面的解决方案。虽然这个代码可能会回答这个问题,但是你仍然可以考虑添加一些解释性的句子,因为这会增加你的答案对其他用户的价值。这只在你从<代码> OS > /COD>模块中导入“代码>连接< /代码>时才起作用,就像这样:<代码>从OS.Purress导入连接< /代码>。不会递归地创建文件夹。虽然这可能回答了作者的问题,但它缺少一些解释性的词语和指向文档的链接。如果没有一些短语,原始代码片段就没有多大帮助。你也会发现这很有帮助。请编辑您的答案。这非常好,因为它使用了python 3,但也显示了目录。如何确保这一行程序中只有文件而不是目录?您的import语句直接导入
Path
,然后在代码中调用
pathlib.Path()
。除非修复,否则当前不会运行。马丁·马丁:谢谢你指出这一点。我已经更新了代码。在本例中,不需要从这些文件中生成
list
,filter返回一个生成器。@MaLiN2223:是的,但我想存储文件列表,因为当生成器耗尽时,文件将不会给出任何结果。无论如何,我已经更新了我的答案:)
import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
    print(filepath.absolute())
for root, directories, filenames in os.walk(directory):
 for directory in directories:
         print os.path.join(root, directory)
 for filename in filenames:
     if filename.endswith(".JPG"):
        print filename
        print os.path.join(root,filename)
from pathlib import Path
path = 'Desktop'
files = filter(lambda filepath: filepath.is_file(), Path(path).glob('*'))
for file in files:
   print(file.absolute())
import os

def absolute_file_paths(directory):
    path = os.path.abspath(directory)
    return [entry.path for entry in os.scandir(path) if entry.is_file()]