【问题标题】:How to join two pathlib.PosixPath paths into one?如何将两个 pathlib.PosixPath 路径合二为一?
【发布时间】:2021-09-18 20:59:47
【问题描述】:

我在使用其他方法连接路径时遇到问题,而不仅仅是将它们加在一起。

Python 版本:3.9.0

任务描述:

用户提供了路径 (/path/to/some/folder),脚本在该路径 (subfolder/filename.ext) 的子文件夹中找到了一个文件,但扩展名错误 (ext)。

将文件扩展名更改为正确的扩展名 (tex) 并将其复制到新路径 (/some/other/path/to/folder),并在用户指定的路径 (/path/to/some/folder) 中保持文件夹结构 (folder/subfolder/)。

有人知道我在哪里犯了错误吗?

import os
from pathlib import Path

input_path = Path('/path/to/some/folder')
file_found_in_input_path = Path('/path/to/some/folder/subfolder/filename.ext')
output_path = Path('/some/other/path/to/folder')
expected = Path('/some/other/path/to/folder/subfolder/filename.tex')
relative_path_to_found_file = Path(str(file_found_in_input_path).replace(str(input_path), '')).with_suffix('.tex')

result = output_path / relative_path_to_found_file                  # Doesn't work
# result = Path.joinpath(output_path, relative_path_to_found_file)  # Doesn't work
# result = os.path.join(output_path, relative_path_to_found_file)   # Doesn't work
# result = f'{output_path}{relative_path_to_found_file}'            # It worked...

print(f'   file_found_in_input_path: {file_found_in_input_path}')
print(f'relative_path_to_found_file: {relative_path_to_found_file}')
print(f'                     result: {result}')
print(f'                   expected: {expected}')

输出:

   file_found_in_input_path: /path/to/some/folder/subfolder/filename.ext
relative_path_to_found_file: /subfolder/filename.tex
                     result: /subfolder/filename.tex
                   expected: /some/other/path/to/folder/subfolder/filename.tex

【问题讨论】:

    标签: python join path operating-system pathlib


    【解决方案1】:

    你的relative_path_to_found_file/subfolder/filename.tex,所以在os.path.join看来是绝对路径。

    你需要从 relative_path_to_found_file 中删除第一个'/',你会得到正确的结果。

    print("wrong = ", os.path.join("/some/other/path/to/folder", "/subfolder/filename.tex"))
    print("correct = ", os.path.join("/some/other/path/to/folder", "subfolder/filename.tex"))
    
    wrong =  /subfolder/filename.tex
    correct =  /some/other/path/to/folder/subfolder/filename.tex
    

    【讨论】:

    • 感谢您的信息。没想到这会影响代码的运行:)
    • @8TM,如果这可以解决您的问题,您可以将此答案标记为答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2014-08-17
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多