【问题标题】:Get file name only (without extension and directory) from file path从文件路径中仅获取文件名(没有扩展名和目录)
【发布时间】:2014-06-06 11:44:03
【问题描述】:

我有什么:

import os
import ntpath

def fetch_name(filepath):
    return os.path.splitext(ntpath.basename(filepath))[0]

a = u'E:\That is some string over here\news_20.03_07.30_10 .m2t'
b = u'E:\And here is some string too\Logo_TimeBuffer.m2t.mpg'

fetch_name(a)
>>u'That is some string over here\news_20.03_07.30_10 ' # wrong!
fetch_name(b)
>>u'Logo_TimeBuffer.m2t' # wrong!

我需要什么:

fetch_name(a)
>>u'news_20.03_07.30_10 '
fetch_name(b)
>>u'Logo_TimeBuffer'

【问题讨论】:

  • 对 Windows 文件名使用原始字符串,因为反斜杠可以转换成其他东西...;就像在 r'E:\That is some string over here\news_20.03_07.30_10 .m2t'
  • 您究竟想如何区分文件扩展名和普通.?是否要将所有以. 分隔的三字符后缀视为扩展名?
  • 您的代码完全可以正常工作。在示例 a 中,\n 不被视为反斜杠字符,因为它是换行符。在示例 b 中,扩展名为 .mpg,已正确删除。一个文件不能有多个扩展名,或者一个包含句点的扩展名。
  • @aspect_mkn8rd,那么您已经有了解决方案。 :) 只需下载或创建您认为是官方的扩展名列表,然后从该列表中的文件名中删除任何后缀。顺便说一句,我明天会写一个程序,使用.bla.mpg作为扩展名。 :P
  • 好的,我好像清楚地了解了所有情况。现在你能把这最后两个 cmets 作为答案发布吗?我想给你们两个代表你们的努力并结束这个问题。 :)

标签: python operating-system filenames filepath


【解决方案1】:

您的代码完全按照应有的方式工作。在示例 a 中,\n 不被视为反斜杠字符,因为它是换行符。在示例 b 中,扩展名为 .mpg,已正确删除。一个文件不能有多个扩展名,或者一个包含句点的扩展名。

要仅在第一个句点之前获取位,您可以使用 ntpath.basename(filepath).split('.')[0],但这可能不是您想要的,因为文件名包含句点是完全合法的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多