如何解决Python中os.path.join的路径拼接问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决Python中os.path.join的路径拼接问题相关的知识,希望对你有一定的参考价值。

首先展示我的脚本如图。第一部分是想读取txt里的内容,按行展示并在每行内容后面加上“.xml”,print(line_new)结果显示为:30313030313030310000284f00000001.xml
30313030313030310000285200000001.xml
确实是我想要的,成功了。然鹅第二步:想要把文件名匹配的文件copy到新的文件夹中时,却出错了,print(xml_path),变成了如下的结果:
E:/SSD-Tensorflow-master/VOC2007/Annotations/1
E:/SSD-Tensorflow-master/VOC2007/Annotations/.
E:/SSD-Tensorflow-master/VOC2007/Annotations/x
E:/SSD-Tensorflow-master/VOC2007/Annotations/m
E:/SSD-Tensorflow-master/VOC2007/Annotations/l
显然是按照原路径+每行的每个字符拼接成了新的路径,这个是什么问题?我想要得到的结果是:print(xml_path)后得到E:/SSD-Tensorflow-master/VOC2007/Annotations/30313030313030310000285c00000001.xml请问大神们,如何解决?

运行这个for循环的时候,你的line_new 只是一个字符串 '30313030313030310000284f00000001.xml' 

循环遍历这个字符串的话,xml_name就相当于是字符串内的每一个字符 。

你应该新建一个 list, 在构建 line_new之后把每一个 line_new加到list里,在这里遍历这个list 来判断其中匹配的路径

追问

能写下代码参考下吗?

追答

line_new_list = [] 

line_new_list.append(line_new)

for xml_name in line_new_list :

参考技术A 是在拼接路径的时候用的。举个例子,
os.path.join(“home”, "me", "mywork")
在Linux系统上会返回
“home/me/mywork"
在Windows系统上会返回
"home\me\mywork"
好处是可以根据系统自动选择正确的路径分隔符"/"或"\"

在 python 中使用 glob.glob 和 os.path.join 创建变量路径

【中文标题】在 python 中使用 glob.glob 和 os.path.join 创建变量路径【英文标题】:Create a variable path using glob.glob and os.path.join in python 【发布时间】:2022-01-24 04:43:07 【问题描述】:

我正在使用 Python 3.6,并且想知道如何创建变量路径以根据更改的年份文件夹定位文件。我有以下文件路径:

C:\Users\al123\Desktop\scripts_test\tutorials\2021\Conference\Notes\single notes\Conference notes content.txt

此代码为我提供了名称中带有“notes”一词的正确文件:

for name in glob.glob(r'C:\Users\al123\Desktop\scripts_test\tutorials\2021\**\*notes*.txt',recursive=True):
    print(name)

但是,有一个 2021 文件夹和一个 2022 文件夹,我希望它根据今天的日期动态更改。我将有一个变量b,它根据今天的日期为我提供年份。假设年份文件夹之前的路径是相同的,当我尝试使用 os.path.join 为年份添加变量 b 时,它什么也没给我:

a=r'C:\Users\al123\Desktop\scripts_test\tutorials'
b=(date.today()-timedelta(days=1)).strftime('%Y')
c=r'**\*notes*.txt'
for name in glob.glob(os.path.join(a,b,c)):
    print(name)

我需要进行哪些更改才能使其正常工作?

【问题讨论】:

【参考方案1】:

这是一种略有不同的方法,但您可以将其转换为 lambda 表达式:

plain_path = r'C:\Users\al123\Desktop\scripts_test\tutorials\year\**\*notes*.txt'
variable_path = lambda year: plain_path.format(year=year)

print(variable_path(2001))
# C:\Users\al123\Desktop\scripts_test\tutorials\2001\**\*notes*.txt

print(variable_path(2002))
# C:\Users\al123\Desktop\scripts_test\tutorials\2002\**\*notes*.txt

【讨论】:

与我尝试做的相比,这是一种更优雅的方法。它工作得很好。谢谢。【参考方案2】:

您忘记了 recursive=True 关键字参数:

for name in glob.glob(os.path.join(a,b,c), recursive=True):
    print(name)

【讨论】:

以上是关于如何解决Python中os.path.join的路径拼接问题的主要内容,如果未能解决你的问题,请参考以下文章

os.path.join路径拼接的问题

python中使用os.path.join()

Python中join函数和os.path.join用法

python的os.path.join()

导入 python 模块时如何解决 KeyError?

在 python 中使用 glob.glob 和 os.path.join 创建变量路径