如何根据 python 中的某些条件剪切字符串的末尾?
how to cut the end of a string by some condition in python?
我已经搜索了可能的方法,但我无法将它们混合起来。我有一个字符串,它是图像的路径。
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
我想做的是把images
换成IMAGES
,把最后的073-1_00191.jpeg
部分剪掉。因此,新的字符串字符串应该是
newString = "D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA/"
而截取的部分(073-1_00191.jpeg
)将单独使用作为处理后的图片名称。函数 .replace()
在这里不起作用,因为我需要提供 path
和 filename
作为单独的参数。
我想要这样做的原因是我通过它们的路径访问图像并对它们做一些事情并且在保存它们时我需要创建另一个目录(在本例中 IMAGES
)和下一个之后的目录(在本例中为 AAAAA
)应保持不变(连同相应图像的名称)。
请注意,图片可能有不同的名称和扩展名
如果我这边有什么不明白的请追问,我会尽力解决
正如评论中提到的,os.path 对于操作以字符串表示的路径很有用。
>>> import os
>>> myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
>>> dirname, basename = os.path.split(myString)
>>> dirname
'D:/Train/16_partitions_annotated/partition1/images/AAAAA'
>>> basename
'073-1_00191.jpeg'
在这一点上,您想如何处理大写 "images" 取决于您更广泛的目标。如果您想简单地将特定单词大写,dirname.replace('images', 'IMAGES')
就足够了。但是您似乎在寻求一种更通用的方法来将绝对路径中倒数第二个目录 大写 :
>>> def cap_penultimate(dirname):
... h, t = os.path.split(dirname)
... hh, ht = os.path.split(h)
... return os.path.join(hh, ht.upper(), t)
...
>>> cap_penultimate(dirname)
'D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA'
简单的方法:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
a = myString.rfind('/')
filename = myString[a+1:]
restofstring = myString[0:a]
alteredstring = restofstring.replace('images', 'IMAGES')
print(alteredstring)
输出:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA
这是切片游戏,你可以试试这个:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
myString1=myString.split('/')
pre_data=myString1[:myString1.index('images')]
after_data=myString1[myString1.index('images'):]
after_data=['IMAGE'] + after_data[1:2]
print("/".join(pre_data+after_data))
输出:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA
我已经搜索了可能的方法,但我无法将它们混合起来。我有一个字符串,它是图像的路径。
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
我想做的是把images
换成IMAGES
,把最后的073-1_00191.jpeg
部分剪掉。因此,新的字符串字符串应该是
newString = "D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA/"
而截取的部分(073-1_00191.jpeg
)将单独使用作为处理后的图片名称。函数 .replace()
在这里不起作用,因为我需要提供 path
和 filename
作为单独的参数。
我想要这样做的原因是我通过它们的路径访问图像并对它们做一些事情并且在保存它们时我需要创建另一个目录(在本例中 IMAGES
)和下一个之后的目录(在本例中为 AAAAA
)应保持不变(连同相应图像的名称)。
请注意,图片可能有不同的名称和扩展名
如果我这边有什么不明白的请追问,我会尽力解决
正如评论中提到的,os.path 对于操作以字符串表示的路径很有用。
>>> import os
>>> myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
>>> dirname, basename = os.path.split(myString)
>>> dirname
'D:/Train/16_partitions_annotated/partition1/images/AAAAA'
>>> basename
'073-1_00191.jpeg'
在这一点上,您想如何处理大写 "images" 取决于您更广泛的目标。如果您想简单地将特定单词大写,dirname.replace('images', 'IMAGES')
就足够了。但是您似乎在寻求一种更通用的方法来将绝对路径中倒数第二个目录 大写 :
>>> def cap_penultimate(dirname):
... h, t = os.path.split(dirname)
... hh, ht = os.path.split(h)
... return os.path.join(hh, ht.upper(), t)
...
>>> cap_penultimate(dirname)
'D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA'
简单的方法:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
a = myString.rfind('/')
filename = myString[a+1:]
restofstring = myString[0:a]
alteredstring = restofstring.replace('images', 'IMAGES')
print(alteredstring)
输出:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA
这是切片游戏,你可以试试这个:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
myString1=myString.split('/')
pre_data=myString1[:myString1.index('images')]
after_data=myString1[myString1.index('images'):]
after_data=['IMAGE'] + after_data[1:2]
print("/".join(pre_data+after_data))
输出:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA