我正在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. 用C模塊擴展python
- 3. 使用distutils構建Python擴展模塊
- 4. 使用setuptools作爲源文件分發擴展模塊
- 5. 擴展黑盒python模塊
- 6. Python獲取文件名與os.path lib
- 7. 使用distutils分配預編譯的python擴展模塊
- 8. 擴展模塊
- 9. 如何擴展python模塊? (python-twitter)
- 10. WAVE文件fmt塊的擴展部分
- 11. Python人使用哪個路徑模塊或類來代替os.path?
- 12. 用Python獲取文件名和擴展名爲hdfs的文件
- 13. 文件擴展名
- 14. 文件擴展名
- 15. 如何按文件/模塊分隔jsDoc
- 16. 從Python C擴展中導入和使用標準Python模塊
- 17. 在Python中更改文件擴展名
- 18. python argparse文件擴展名檢查
- 19. SQLite:.db文件擴展名.sqlite文件擴展名爲
- 20. Python擴展模塊初始化 - 多個文件
- 21. 使用preg_replace獲取文件擴展名
- 22. 使用sed更改文件擴展名
- 23. .htaccess網址:使用文件擴展名?
- 24. 使用Jquery更改文件擴展名
- 25. 模塊化擴展
- 26. 擴展一個擴展類的模塊
- 27. python上的bash擴展模塊
- 28. 在python中包含/擴展模塊
- 29. Python擴展模塊段錯誤
- 30. 嵌套的Python C擴展/模塊?
@Nick,不大。他想要處理多個擴展名的文件名。 – 2011-05-08 20:42:35
'os.path.splitext()'將正確地將''foobar.aux.xml「'分成''foobar.aux」'和'「.xml」'。你想/需要別的東西嗎? – martineau 2011-05-08 21:39:04