我是Python中的初學者。我想明白下面的函數,它返回文件的擴展名:python中返回文件擴展名的函數
def get_extn(filename):
return filename[filename.rfind('.'):][1:]
我不明白爲什麼有在RFIND函數[]而不是(),爲什麼括號有:與[1 :]在括號之前。我讚賞一個解釋。
我是Python中的初學者。我想明白下面的函數,它返回文件的擴展名:python中返回文件擴展名的函數
def get_extn(filename):
return filename[filename.rfind('.'):][1:]
我不明白爲什麼有在RFIND函數[]而不是(),爲什麼括號有:與[1 :]在括號之前。我讚賞一個解釋。
您需要從理解Python語法開始。
方括號訪問數組中的元素,括號用於調用函數。 rfind是一個函數,爲此您輸入參數'。',以查找文件名中的句點。括號用於檢索數組中的元素 - 文件名中的元素,因此filename []和數組中的元素。
冒號,:,用於數組中的切片。 [:]表示整個數組,[1:]表示第一個之後的元素。請參閱:Explain slice notation
您在這裏看到的是一個函數,它有兩次切片語法。對於支持切片語法對象,一個可以寫:
object[f:t]
與f
和t
指數。然後,您將獲得一個以f
開頭並以t
結尾的子序列(t
是唯一的)。如果沒有提供f
或t
,那通常意味着我們從開始或結束切片。
你的問題中的作用是有點cryptical,實際上等同於:
def get_extn(filename):
f = filename.rfind('.')
filename = filename[f:]
return filename[1:]
所以首先我們獲得最後點的指數,那麼我們構建了從f
啓動子,最後我們從該索引1開始的子字符串構造一個子字符串(從而刪除第一個字符,即'.'
)。
我建議使用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'
若要去除點。 –
argh,爲什麼不''返回文件名[filename.rfind('。')+ 1:]'而不是切片兩次,並在過程中創建一個額外的臨時字符串?這讓一些黑客一起竊取解決方案... – Baldrickk