nos*_*klo 1810
是.使用os.path.splitext(参见Python 2.X文档或Python 3.X文档):
>>> import os
>>> filename, file_extension = os.path.splitext('/path/to/somefile.ext')
>>> filename
'/path/to/somefile'
>>> file_extension
'.ext'
Run Code Online (Sandbox Code Playgroud)
与大多数手动字符串拆分尝试不同,os.path.splitext将正确地/a/b.c/d视为没有扩展而不是扩展.c/d,并且它将被.bashrc视为没有扩展而不是扩展.bashrc:
>>> os.path.splitext('/a/b.c/d')
('/a/b.c/d', '')
>>> os.path.splitext('.bashrc')
('.bashrc', '')
Run Code Online (Sandbox Code Playgroud)
Bri*_*eal 372
import os.path
extension = os.path.splitext(filename)[1]
Run Code Online (Sandbox Code Playgroud)
Jer*_*meJ 169
版本3.4中的新功能.
import pathlib
print(pathlib.Path('yourPathGoesHere').suffix)
Run Code Online (Sandbox Code Playgroud)
我很惊讶没有人提到过pathlib,pathlib太棒了!
如果您需要所有后缀(例如,如果您有.tar.gz),.suffixes将返回它们的列表!
won*_*bak 105
import os.path
extension = os.path.splitext(filename)[1][1:]
Run Code Online (Sandbox Code Playgroud)
仅获取扩展名的文本,不带点.
Mur*_*rlu 68
一个选项可能是从点分割:
>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'
Run Code Online (Sandbox Code Playgroud)
文件没有扩展名时没有错误:
>>> "filename".split(".")[-1]
'filename'
Run Code Online (Sandbox Code Playgroud)
但你必须小心:
>>> "png".split(".")[-1]
'png' # But file doesn't have an extension
Run Code Online (Sandbox Code Playgroud)
ble*_*ted 35
值得在那里添加一个较低的,所以你不会发现自己想知道为什么JPG没有出现在你的列表中.
os.path.splitext(filename)[1][1:].strip().lower()
Run Code Online (Sandbox Code Playgroud)
小智 16
上面的任何解决方案都有效,但是在Linux上我发现扩展字符串末尾有一个换行符会阻止匹配成功.将strip()方法添加到最后.例如:
import os.path
extension = os.path.splitext(filename)[1][1:].strip()
Run Code Online (Sandbox Code Playgroud)
Xav*_*CLL 14
随着splitext有与双扩展名的文件的问题(例如file.tar.gz,file.tar.bz2等..)
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension
'.gz'
Run Code Online (Sandbox Code Playgroud)
但应该是: .tar.gz
可能的解决方案在这里
小智 11
虽然这是一个古老的话题,但我想知道为什么在这种情况下没有提到一个叫做rpartition的非常简单的pyi api:
要获得给定文件绝对路径的扩展,您只需键入:
filepath.rpartition('.')[-1]
Run Code Online (Sandbox Code Playgroud)
例:
path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]
Run Code Online (Sandbox Code Playgroud)
会给你:'csv'
Pas*_*ten 10
感到惊讶的是还没有提到:
import os
fn = '/some/path/a.tar.gz'
basename = os.path.basename(fn) # os independent
Out[] a.tar.gz
base = basename.split('.')[0]
Out[] a
ext = '.'.join(basename.split('.')[1:]) # <-- main part
# if you want a leading '.', and if no result `None`:
ext = '.' + ext if ext else None
Out[] .tar.gz
Run Code Online (Sandbox Code Playgroud)
优点:
作为功能:
def get_extension(filename):
basename = os.path.basename(filename) # os independent
ext = '.'.join(basename.split('.')[1:])
return '.' + ext if ext else None
Run Code Online (Sandbox Code Playgroud)
dat*_*ght 10
splitext()函数将文件路径拆分为具有两个值 \xe2\x80\x93 根和扩展名的元组。
\nimport os\n# unpacking the tuple\nfile_name, file_extension = os.path.splitext("/Users/Username/abc.txt")\nprint(file_name)\nprint(file_extension)\nRun Code Online (Sandbox Code Playgroud)\nPathlib模块获取文件扩展名
\nimport pathlib\npathlib.Path("/Users/pankaj/abc.txt").suffix\n#output:'.txt'\nRun Code Online (Sandbox Code Playgroud)\n
小智 9
filename='ext.tar.gz'
extension = filename[filename.rfind('.'):]
Run Code Online (Sandbox Code Playgroud)
你可以在pathlib模块中找到一些很棒的东西.
import pathlib
x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix
print(x)
# Output
'.txt'
Run Code Online (Sandbox Code Playgroud)
只是join全部pathlib suffixes。
>>> x = 'file/path/archive.tar.gz'
>>> y = 'file/path/text.txt'
>>> ''.join(pathlib.Path(x).suffixes)
'.tar.gz'
>>> ''.join(pathlib.Path(y).suffixes)
'.txt'
Run Code Online (Sandbox Code Playgroud)
您可以在split上使用filename:
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
Run Code Online (Sandbox Code Playgroud)
这不需要额外的库
另一个正确拆分的解决方案:
# to get extension only
s = 'test.ext'
if '.' in s: ext = s.rsplit('.', 1)[1]
# or, to get file name and extension
def split_filepath(s):
"""
get filename and extension from filepath
filepath -> (filename, extension)
"""
if not '.' in s: return (s, '')
r = s.rsplit('.', 1)
return (r[0], r[1])
Run Code Online (Sandbox Code Playgroud)
小智 5
即使已经回答了这个问题,我也会在 Regex 中添加解决方案。
>>> import re
>>> file_suffix = ".*(\..*)"
>>> result = re.search(file_suffix, "somefile.ext")
>>> result.group(1)
'.ext'
Run Code Online (Sandbox Code Playgroud)
小智 5
这是一种直接的字符串表示技术:我看到了很多解决方案,但我认为大多数都在考虑拆分。但是,每次出现“。”时都会进行拆分。。您宁愿寻找的是分区。
string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用以下代码来拆分文件名和扩展名。
import os.path
filenamewithext = os.path.basename(filepath)
filename, ext = os.path.splitext(filenamewithext)
#print file name
print(filename)
#print file extension
print(ext)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
847193 次 |
| 最近记录: |