我正在python中使用os.path.splitext()
,好奇的是,如果可以使用多個「。」分隔文件名和擴展名?例如使用splitext的「foobar.aux.xml」。文件名因[foobar,foobar.xml,foobar.aux.xml]而異。有沒有更好的辦法?使用python os.path模塊分隔文件擴展名
回答
拆分與os.extsep
。
>>> import os
>>> 'filename.ext1.ext2'.split(os.extsep)
['filename', 'ext1', 'ext2']
如果你想第一點之後的一切:
>>> 'filename.ext1.ext2'.split(os.extsep, 1)
['filename', 'ext1.ext2']
如果您使用的是有可能包含點的目錄路徑:
>>> def my_splitext(path):
... """splitext for paths with directories that may contain dots."""
... li = []
... path_without_extensions = os.path.join(os.path.dirname(path), os.path.basename(path).split(os.extsep)[0])
... extensions = os.path.basename(path).split(os.extsep)[1:]
... li.append(path_without_extensions)
... # li.append(extensions) if you want extensions in another list inside the list that is returned.
... li.extend(extensions)
... return li
...
>>> my_splitext('/path.with/dots./filename.ext1.ext2')
['/path.with/dots./filename', 'ext1', 'ext2']
或'os.path.extsep',如果這很方便。 – 2011-05-08 20:48:01
@Artur Gaspar:這是可行的,不知道確切的字符串?所以你可以分開目錄中的所有文件或通配符? – KennyC 2011-05-08 20:59:36
@KennyC它應該適用於沒有完整路徑(僅文件名)的所有文件名。我添加到答案my_splitext函數應適用於所有路徑。如果你想要通配符,你應該使用'glob'模塊。 – 2011-05-08 21:13:59
,你可以嘗試使用:
names = pathname.split('.')
filename = names[0]
extensions = names[1:]
,如果你想使用splitext,您可以使用類似:
import os
path = 'filename.es.txt'
while True:
path, ext = os.path.splitext(path)
if not ext:
print path
break
else:
print ext
生產:
.txt
.es
filename
從的幫助功能:
擴展名是從最後一個 點到結束的所有內容,忽略了前導點。
所以答案是否定的,你不能用這個函數來做。
如果你想在年底分裂出去的任何數量的擴展,你可以創建這樣的功能:
def splitext_recurse(p):
base, ext = os.path.splitext(p)
if ext == '':
return (base,)
else:
return splitext_recurse(base) + (ext,)
,並使用它,像這樣:
>>> splitext_recurse("foobar.aux.xml")
('foobar', '.aux', '.xml')
如果你只是想要一個長延伸,比如'('foobar','.aux.xml')',那麼這個過程大致相同。 – 2011-05-08 20:30:26
- 1. 使用os.path基於擴展名搜索文件
- 2. 如何擴展os.path以包含子模塊
- 3. 用C模塊擴展python
- 4. 使用distutils構建Python擴展模塊
- 5. 使用setuptools作爲源文件分發擴展模塊
- 6. 擴展黑盒python模塊
- 7. Python獲取文件名與os.path lib
- 8. 使用distutils分配預編譯的python擴展模塊
- 9. 使用擴展名使用文件名的拆分選項
- 10. 擴展模塊
- 11. 在不同的擴展名和分隔符中讀取文件
- 12. 不帶擴展名的塊文件
- 13. 如何擴展python模塊? (python-twitter)
- 14. 用於管道分隔文件的可接受文件擴展名是什麼?
- 15. WAVE文件fmt塊的擴展部分
- 16. 用Python獲取文件名和擴展名爲hdfs的文件
- 17. 文件擴展名
- 18. Python人使用哪個路徑模塊或類來代替os.path?
- 19. 文件擴展名
- 20. 導入ES2015模塊需要的文件擴展名
- 21. 文件擴展名
- 22. 文件擴展名
- 23. 文件擴展名
- 24. 從Python C擴展中導入和使用標準Python模塊
- 25. 文件擴展名[]
- 26. 如何按文件/模塊分隔jsDoc
- 27. 我們可以加載沒有「.pm」文件擴展名或其他文件擴展名的perl模塊嗎?
- 28. 調用Python C擴展模塊時出現分段錯誤
- 29. 在Python中更改文件擴展名
- 30. Python刪除某些文件擴展名
@Nick,不大。他想要處理多個擴展名的文件名。 – 2011-05-08 20:42:35
'os.path.splitext()'將正確地將''foobar.aux.xml「'分成''foobar.aux」'和'「.xml」'。你想/需要別的東西嗎? – martineau 2011-05-08 21:39:04