为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Python 中获取绝对路径

无法在 Python 中获取绝对路径

白猪掌柜的 2022-10-06 16:24:46
我尝试使用os.path.abspath(file)以及Path.absolute(file)获取.png我正在处理的文件的路径,这些文件位于与代码所在的项目文件夹不同的驱动器上。以下脚本的结果是“代码的项目文件夹/ filename.png”,而显然我需要的是该文件夹所在的路径.png;for root, dirs, files in os.walk(newpath):    for file in files:        if not file.startswith("."):            if file.endswith(".png"):                number, scansize, letter = file.split("-")                filepath = os.path.abspath(file)                # replace weird backslash effects                correctedpath = filepath.replace(os.sep, "/")                newentry = [number, file, correctedpath]                textures.append(newentry)我在这里阅读了其他答案,这些答案似乎表明代码的项目文件不能与正在处理的文件夹位于同一目录中。但这里不是这样。有人可以指出我没有得到什么吗?我需要绝对路径,因为程序的目的是将文件的路径写入文本文件。
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您可以pathlib.Path.rglob在此处使用递归获取所有 png:

作为列表理解:


from pathlib import Path

search_dir = "/path/to/search/dir"

# This creates a list of tuples with `number` and the resolved path

paths = [(p.name.split("-")[0], p.resolve()) for p in Path(search_dir).rglob("*.png")]

或者,您可以循环处理它们:


paths = []

for p in Path(search_dir).rglob("*.png"):

    number, scansize, letter = p.name.split("-")

    # more processing ...

    paths.append([number, p.resolve()])


查看完整回答
反对 回复 2022-10-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

结果来自


for root, dirs, files in os.walk(newpath):

是文件只包含没有目录路径的文件名。仅使用文件名意味着 python 默认使用您的项目文件夹作为这些文件名的目录。在您的情况下,文件位于新路径中。您可以使用 os.path.join 将目录路径添加到找到的文件名。


filepath = os.path.join(newpath, file)

如果您想在子目录中找到 png 文件,最简单的方法是使用 glob:


import glob


newpath = r'D:\Images'



file_paths = glob.glob(newpath + "/**/*.png", recursive=True)


for file_path in file_paths:

    print(file_path)


查看完整回答
反对 回复 2022-10-06
?
青春有我

TA贡献1784条经验 获得超8个赞

我最近刚刚写了一些你正在寻找的东西。


此代码依赖于您的文件是路径末尾的假设。不适合找目录之类的。


不需要嵌套循环。



DIR = "your/full/path/to/direcetory/containing/desired/files"


def get_file_path(name, template):

    """

    @:param template:  file's template (txt,html...)

    @return: The path to the given file.

    @rtype: str

    """

    substring = f'{name}.{template}'

    for path in os.listdir(DIR):

        full_path = os.path.join(DIR, path)

        if full_path.endswith(substring):

            return full_path


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信