Я работаю на python с os.path.splitext()
и любопытно, можно ли отделить имена файлов от расширений с несколькими "."? например "foobar.aux.xml" с использованием splitext. Имена файлов варьируются от [foobar, foobar.xml, foobar.aux.xml]. Есть ли способ лучше?
Разделение расширений файлов с помощью модуля python os.path
Ответ 1
Разделить на 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']
Ответ 2
вы можете попробовать:
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
Ответ 3
С помощью функции:
Расширение - это все, начиная с последнего точка до конца, игнорируя ведущие точки.
Таким образом, ответ отрицательный, вы не можете сделать это с помощью этой функции.
Ответ 4
Если вы хотите отделить любое количество расширений в конце, вы можете создать такую функцию:
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')