【问题标题】:Extract full Path and File Name提取完整路径和文件名
【发布时间】:2022-01-19 19:30:27
【问题描述】:

尝试编写一个遍历文件系统并返回绝对路径和文件名以供另一个函数使用的函数。

例如"/testdir/folderA/222/filename.ext"

尝试了多个版本后,我似乎无法正常工作。

filesCheck=[]

def findFiles(filepath):
    files=[]
    for root, dirs, files in os.walk(filepath):
        for file in files:
            currentFile = os.path.realpath(file)
            print (currentFile)
            if os.path.exists(currentFile):
                files.append(currentFile)

    return files

filesCheck = findFiles(/testdir)

这会返回 "filename.ext"(只有一个)。

currentFile = os.path.join(root, file) 替换os.path.realpath(file),它会进入第一个目录中的循环。尝试os.path.join(dir, file) 失败,因为我的文件夹之一被命名为222

我转了一圈,距离有点近,但无法让它发挥作用。 使用 Python 3.6 在 Linux 上运行

【问题讨论】:

  • 为什么要测试 os.walk 返回的文件是否真的存在?如果它实际上不存在,它怎么能被退回?
  • 你能解释一下当你使用 os.path.join 时函数是如何进入循环的吗?这应该是正确的解决方案,但你得到什么样的输出?
  • 你认为你要附加什么files?请注意,有很多事情你称之为files,而正在发生的事情可能不是你想的那样。事实上,你的程序会结束吗?
  • 为了 100% 清晰,将files=[] 重命名为retval=[],然后附加到它并返回它而不是files,因为files 在你的for 循环中隐藏了原始files。通过这些更改,您的程序运行良好。
  • 回复评论

标签: python path os.walk


【解决方案1】:

您的代码有几处问题。

  1. 有多个值被分配给变量名称files
  2. 您不会将root 目录添加到os.walk() 返回的每个文件名中,这可以通过os.path.join() 完成。
  3. 您没有将字符串传递给findFiles() 函数。

如果您解决了这些问题,则不再需要致电 os.path.exists(),因为您可以确定它确实如此。

这是一个工作版本:

import os

def findFiles(filepath):
    found = []
    for root, dirs, files in os.walk(filepath):
        for file in files:
            currentFile = os.path.realpath(os.path.join(root, file))
            found.append(currentFile)

    return found

filesCheck = findFiles('/testdir')
print(filesCheck)

【讨论】:

【解决方案2】:

您好,我认为这是您需要的。也许你可以试一试:)

from os import walk

path = "C:/Users/SK/Desktop/New folder"

files = []
for (directoryPath, directoryNames, allFiles) in walk(path):
    for file in allFiles:
        files.append([file, f"{directoryPath}/{file}"])

print(files)

输出:

[ ['index.html', 'C:/Users/SK/Desktop/New folder/index.html'], ['test.py', 'C:/Users/SK/Desktop/New folder/test.py'] ]

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多