如何解决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 :
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的路径拼接问题的主要内容,如果未能解决你的问题,请参考以下文章