【问题标题】:the function in python that returns extension of a filepython中返回文件扩展名的函数
【发布时间】:2017-06-30 00:45:57
【问题描述】:

我是 Python 的初学者。我想了解以下函数,它返回该文件的扩展名:

def get_extn(filename):
    return filename[filename.rfind('.'):][1:]

我不明白为什么 rfind 函数 [] 中有括号而不是 () 以及为什么括号前有 : 和 [1:]。我很欣赏一个解释。

【问题讨论】:

  • 去除点。
  • 啊,为什么不return filename[filename.rfind('.') + 1 :] 而不是切片两次并在此过程中创建一个额外的临时字符串?这有点像有人一起破解解决方案......

标签: python python-3.x file


【解决方案1】:

你在这里看到的是一个有两次切片语法的函数。对于支持 slicing 语法的对象,可以这样写:

object[f:t]

带有ft 索引。然后您会得到一个以f 开头并以t 结尾的子序列(t 是独占的)。如果没有提供ft,这通常意味着我们从头开始切片。

您问题中的函数有点神秘,实际上相当于:

def get_extn(filename):
    f = filename.rfind('.')
    filename = filename[f:]
    return filename[1:]

所以首先我们获取最后一个点的索引,然后我们构造一个从f 开始的子字符串,最后我们从索引 1 开始的子字符串构造一个子字符串(从而删除第一个字符是 @ 987654331@).

【讨论】:

    【解决方案2】:

    你需要从理解python语法开始。

    方括号访问数组中的元素,括号用于调用函数。 rfind 是一个函数,您正在为此输入参数“.”,以查找文件名中的句点。括号用于检索数组中的元素 - 文件名中的元素,即文件名 [],以及数组中的元素。

    冒号 : 用于数组中的切片。 [:] 表示整个数组,[1:] 表示第一个之后的元素。见:Explain slice notation

    【讨论】:

      【解决方案3】:

      我建议使用os.path module 来处理文件名和路径。

      例子:

      import os.path
      
      for path in ('/tmp/file.txt', 'file.doc', 'file', 'file.a.b.c'):
          basename, extension=os.path.splitext(path)
          print("path: '{}', base: '{}' extension '{}'".format(path,basename,extension))
      

      打印:

      path: '/tmp/file.txt', base: '/tmp/file' extension '.txt'
      path: 'file.doc', base: 'file' extension '.doc'
      path: 'file', base: 'file' extension ''
      path: 'file.a.b.c', base: 'file.a.b' extension '.c'
      

      【讨论】:

        猜你喜欢
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 2021-10-24
        相关资源
        最近更新 更多