Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python中的字符串索引从文件名返回文件扩展名_Python_String_Parsing_Text_Indexing - Fatal编程技术网

使用python中的字符串索引从文件名返回文件扩展名

使用python中的字符串索引从文件名返回文件扩展名,python,string,parsing,text,indexing,Python,String,Parsing,Text,Indexing,我在将这种逻辑写在纸上时遇到了一些困难: 我想解析的字符串:“Jan-2012演示文稿v1.3.ppt.pdf-500KB” 此字符串可以更改,但结构始终为“NAME+EXT+FILESIZE” 我想退回分机。然而,由于明显的原因,我不能仅仅拆分(“.” 所以我想出了别的办法: stringy = "Jan - 2012 Presentation v1.3.ppt.pdf - 500KB" ext = [".pdf",".jpg",".ppt",".txt",".doc"] for i in

我在将这种逻辑写在纸上时遇到了一些困难:

我想解析的字符串:
“Jan-2012演示文稿v1.3.ppt.pdf-500KB”
此字符串可以更改,但结构始终为“NAME+EXT+FILESIZE”

我想退回分机。然而,由于明显的原因,我不能仅仅拆分(“.” 所以我想出了别的办法:

stringy = "Jan - 2012 Presentation v1.3.ppt.pdf - 500KB"
ext = [".pdf",".jpg",".ppt",".txt",".doc"]

for i in ext:
    indx = stringy.find(i)
    ...
我遇到了一个难题,我需要弄清楚如何告诉Python从产生的最大索引开始进行扩展。应该是类似于
whatiwant=stringy[indx:4]
,但我不知道如何告诉它只取最大的索引。。。最大的索引显然意味着字符串中的最后一个扩展名,这就是我想要得到的扩展名。在这个特定的例子中,我不关心“ppt”,而是“pdf”


这也许可以用一种更为通灵的方式来实现吗?或者至少更有效?

使用
regex

>>> strs="Jan - 2012 Presentation v1.3.ppt.pdf - 500KB"

>>> re.findall(r"(\.\w+)",strs)[-1]
'.pdf'
或:

>>> re.findall(r".*(\.\w+)",strs)
['.pdf']
试试这个:

>>> stringy = "Jan - 2012 Presentation v1.3.ppt.pdf - 500KB"
>>> extension = stringy.split(".")[-1].split("-")[0].strip()
>>> extension
'pdf'

所有出现的字符串中是否都有破折号(“-”)?对于此特定问题,还有
string
rfind
。破折号始终位于字符串的末尾,用于分隔字符串的文件大小部分。是的,为什么要投否决票?这不是一个有效的问题吗?这将获得文件大小,而且看起来非常有希望。我将通过一些变化的字符串来运行它。所以rfind会从字符串的右侧找到任何东西,并使用通常的[x:y]东西来表示要剪切什么?@Capt.Morgan:如果它是如此“简单明了”,你自己能告诉我什么会打破这种方法吗?这是海报的问题,而不是没有更好的办法的阿西孩子的问题,除了留下毫无帮助和毫无成果的评论。如果你没有什么有用的贡献,请不要张贴,句号。因为我没有选择你的答案,所以受到如此的伤害有点不成熟,你不觉得吗?@Capt.Morgan:不成熟是在帖子上写一个可怜的问题,要求人们为你工作。不成熟就是不了解自己的局限性。不成熟就是对帮助你的人粗鲁。@Capt.Morgan我认为SilentGhost的答案是解决这个问题的最好办法,这个办法很容易被长度大于或等于4个字符的扩展名打断,比如
.torrent
.docx
In [44]: stringy[stringy.rfind('.'):stringy.rfind('.')+4]
Out[44]: '.pdf'