猿问

无法在 Python 中获取绝对路径

我尝试使用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)

我在这里阅读了其他答案,这些答案似乎表明代码的项目文件不能与正在处理的文件夹位于同一目录中。但这里不是这样。有人可以指出我没有得到什么吗?我需要绝对路径,因为程序的目的是将文件的路径写入文本文件。


白猪掌柜的
浏览 98回答 3
3回答

素胚勾勒不出你

您可以pathlib.Path.rglob在此处使用递归获取所有 png:作为列表理解:from pathlib import Pathsearch_dir = "/path/to/search/dir"# This creates a list of tuples with `number` and the resolved pathpaths = [(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()])

Smart猫小萌

结果来自for root, dirs, files in os.walk(newpath):是文件只包含没有目录路径的文件名。仅使用文件名意味着 python 默认使用您的项目文件夹作为这些文件名的目录。在您的情况下,文件位于新路径中。您可以使用 os.path.join 将目录路径添加到找到的文件名。filepath = os.path.join(newpath, file)如果您想在子目录中找到 png 文件,最简单的方法是使用 glob:import globnewpath = r'D:\Images'file_paths = glob.glob(newpath + "/**/*.png", recursive=True)for file_path in file_paths:    print(file_path)

青春有我

我最近刚刚写了一些你正在寻找的东西。此代码依赖于您的文件是路径末尾的假设。不适合找目录之类的。不需要嵌套循环。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
随时随地看视频慕课网APP

相关分类

Python
我要回答