【问题标题】:Return the file extension from filename using string index in python使用python中的字符串索引从文件名返回文件扩展名
【发布时间】:2012-11-02 11:40:31
【问题描述】:

我在把这个逻辑写在纸上有点麻烦:

我要解析的字符串:"Jan - 2012 Presentation v1.3.ppt.pdf - 500KB" 此字符串可以变化,但结构始终为“NAME+EXT+FILESIZE”

我想退回扩展名。但是由于显而易见的原因,我不能只是split(".") 所以我想出了别的办法:

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”。

这也许可以用更 Pythonic 的方式来完成吗?或者至少更有效?

【问题讨论】:

  • 所有出现的字符串中是否都有破折号(“-”)?
  • 针对这个具体问题,还有stringrfind
  • 破折号始终位于末尾以分隔字符串的文件大小部分。是的。
  • 为什么要投反对票?这不是一个有效的问题吗?

标签: python string parsing text indexing


【解决方案1】:
In [44]: stringy[stringy.rfind('.'):stringy.rfind('.')+4]
Out[44]: '.pdf'

【讨论】:

  • 看起来很有希望。我将通过一些字符串的变体来运行它。所以 rfind 会从字符串的右侧开始查找任何内容,并使用通常的 [x:y] 内容来表示要剪切的内容?
  • @Capt.Morgan:如果它如此“简单明了”,你自己就不能判断什么会破坏这种方法吗?
  • 这是发帖人的问题,而不是那些在 SO 中无事可做的蠢货,除了留下无用且无效率的 cmets。如果您没有任何有用的贡献,请不要发布,句号。 Edit 这么粗鲁有点不成熟,因为我没有选择你的答案,你不觉得吗?
  • @Capt.Morgan:不成熟的是发布可悲的问题,要求人们为你工作。不成熟是不了解自己的局限。不成熟就是对帮助你的人无礼。
  • @Capt.Morgan 我认为 SilentGhost 的回答是解决这个问题的最佳解决方案,这个解决方案很容易中断长度大于或等于 4 个字符的扩展,比如 .torrent,@987654324 @
【解决方案2】:

使用regex:

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

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

或:

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

【讨论】:

    【解决方案3】:

    试试这个:

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

    【讨论】:

    • 这也会得到文件大小
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多