我已经搜索过可能的方法,但我还是无法将它们混合起来。我有一个字符串,是图像的路径。
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
)应该保持不变(连同相应图像的名称)。
请注意,图片可能包含不同的名称和扩展名
如果我的身边有什么不明白的地方请问,我会尽力清理
答案 0 :(得分:3)
正如评论中所提到的,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'
此时,您希望如何处理大写"图像"是您更广泛目标的一个功能。如果您只想将该特定单词大写,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'
答案 1 :(得分:-1)
简单的方法:
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
答案 2 :(得分:-1)
这是切片的游戏,在这里你可以试试这个:
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