gpt4 book ai didi

python - 知道路径的最后一部分和基目录时,在 python 中查找文件的绝对路径?

转载 作者:行者123 更新时间:2023-12-01 15:13:55 25 4
gpt4 key购买 nike

使用 python,我有现有文件路径的最后部分,如下所示:

sub_folder1/file1.txt
sub_folder2/file120.txt
sub_folder78/file99.txt

请注意,这些路径不是我正在使用的当前文件夹的相对路径,例如,此 pandas.read_csv('sub_folder1/file1.txt') 将通过一个不存在的-文件错误。尽管如此,我知道所有文件都有相同的基目录 base_dir,但我不知道绝对路径。这意味着文件可以这样定位:

base_dir/inter_folder1/sub_folder1/file1.txt

或者像这样:

base_dir/inter_folder7/inter_folder4/.../sub_folder1/file1.txt

是否有返回绝对路径的函数,当给定路径的最后一部分和文件的基本目录(或等效地,找到中间文件夹)时?应该是这样的:

absolut_path = some_func(end_path='bla/bla.txt', base_dir='BLAH')

我认为 pathlib 可能有解决方案,但在那里找不到任何东西。谢谢


我需要它来执行如下操作:

for end_path in list_of_paths:
full_path = some_func(end_path=end_path, base_dir='base_dir')
image = cv2.imread(full_path)

最佳答案

这应该很容易从 pathlib 中实现:

from pathlib import Path

def find(end_path: str, base_dir: str):
for file in Path(base_dir).rglob("*"):
if str(file).endswith(end_path):
yield file

这是一个 generator , 来匹配pathlib接口(interface);因此它将产生 pathlib.PosixPath 对象。它还会找到所有匹配的文件,例如:

[str(f) for f in find(end_path="a.txt", base_dir="my_dir")]
# creates:
# ['my_dir/a.txt', 'my_dir/sub_dir/a.txt']

如果你只想要第一个值,你可以只返回第一个项目:

def find_first(end_path: str, base_dir: str):
for file in Path(base_dir).rglob("*"):
if str(file).endswith(end_path):
return str(file)

abs_path = find_first(end_path="a.txt", base_dir="my_dir")

一个可以改进查找的更好的函数:

from pathlib import Path

def find(pattern, suffixes, base_dir):
for file in Path(base_dir).rglob(pattern):
if any(str(file).endswith(suffix) for suffix in suffixes):
yield str(file)

base_dir = "base_directory"
suffixes = [
'sub_folder1/file1.txt',
'sub_folder2/file120.txt',
'sub_folder78/file99.txt',
]

for full_path in find(pattern="*.txt", suffixes=suffix, base_dir=base_dir):
image = cv2.imread(full_path)

关于python - 知道路径的最后一部分和基目录时,在 python 中查找文件的绝对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60932281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com