从文件名中提取扩展名
- 2024-12-24 08:55:00
- admin 原创
- 64
问题描述:
是否有从文件名中提取扩展名的函数?
解决方案 1:
使用os.path.splitext
:
>>> import os
>>> filename, file_extension = os.path.splitext('/path/to/somefile.ext')
>>> filename
'/path/to/somefile'
>>> file_extension
'.ext'
与大多数手动字符串拆分尝试不同,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', '')
解决方案 2:
3.4 版本中的新功能。
import pathlib
print(pathlib.Path('yourPath.example').suffix) # '.example'
print(pathlib.Path("hello/foo.bar.tar.gz").suffixes) # ['.bar', '.tar', '.gz']
print(pathlib.Path('/foo/bar.txt').stem) # 'bar'
我很惊讶还没有人提到pathlib
,pathlib
真的太棒了!
解决方案 3:
import os.path
extension = os.path.splitext(filename)[1]
解决方案 4:
import os.path
extension = os.path.splitext(filename)[1][1:]
仅获取扩展的文本,不包含点。
解决方案 5:
对于简单的用例,一个选项可能是从点分离:
>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'
当文件没有扩展名时不会出现错误:
>>> "filename".split(".")[-1]
'filename'
但你必须小心:
>>> "png".split(".")[-1]
'png' # But file doesn't have an extension
也不能处理 Unix 系统中的隐藏文件:
>>> ".bashrc".split(".")[-1]
'bashrc' # But this is not an extension
对于一般用途,最好os.path.splitext
解决方案 6:
值得在其中添加一个较低的值,这样您就不会发现自己想知道为什么 JPG 没有出现在您的列表中。
os.path.splitext(filename)[1][1:].strip().lower()
解决方案 7:
使用 splitext 时,具有双重扩展名的文件会出现问题(例如file.tar.gz
,file.tar.bz2
等等)。
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension
'.gz'
但应该是:.tar.gz
可能的解决方案在这里
解决方案 8:
上述任何解决方案都有效,但在 Linux 上,我发现扩展字符串末尾有一个换行符,这将阻止匹配成功。将方法添加strip()
到末尾。例如:
import os.path
extension = os.path.splitext(filename)[1][1:].strip()
解决方案 9:
您可以在 pathlib 模块(在 python 3.x 中可用)中找到一些很棒的东西。
import pathlib
x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix
print(x)
# Output
'.txt'
解决方案 10:
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'
解决方案 11:
虽然这是一个老话题,但我想知道为什么在这种情况下没有人提到一个非常简单的 python api,称为 rpartition:
要获取给定文件绝对路径的扩展名,您只需输入:
filepath.rpartition('.')[-1]
例子:
path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]
将返回:'csv'
解决方案 12:
令人惊讶的是,这一点尚未被提及:
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
好处:
我能想到的所有东西都按预期运行
没有模块
没有正则表达式
跨平台
易于扩展(例如,扩展时无需前导点,仅需扩展的最后一部分)
作为函数:
def get_extension(filename):
basename = os.path.basename(filename) # os independent
ext = '.'.join(basename.split('.')[1:])
return '.' + ext if ext else None
解决方案 13:
split
您可以在 a 上使用filename
:
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
这不需要额外的库
解决方案 14:
使用 Python 从文件名中提取扩展名
Python os 模块 splitext()
splitext()函数将文件路径拆分为一个具有两个值的元组——根和扩展名。
import os
# unpacking the tuple
file_name, file_extension = os.path.splitext("/Users/Username/abc.txt")
print(file_name)
print(file_extension)
使用 Pathlib 模块获取文件扩展名
Pathlib 模块获取文件扩展名
import pathlib
pathlib.Path("/Users/pankaj/abc.txt").suffix
#output:'.txt'
解决方案 15:
filename='ext.tar.gz'
extension = filename[filename.rfind('.'):]
解决方案 16:
即使这个问题已经得到解答,我也会在 Regex 中添加解决方案。
>>> import re
>>> file_suffix = ".*(..*)"
>>> result = re.search(file_suffix, "somefile.ext")
>>> result.group(1)
'.ext'
解决方案 17:
这是一种直接的字符串表示技术:我看到很多解决方案都提到了这一点,但我认为大多数人都在考虑拆分。然而,拆分会在每次出现“。”时执行。您更愿意寻找的是分区。
string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]
解决方案 18:
另一种右分割的解决方案:
# 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])
解决方案 19:
您可以使用以下代码来拆分文件名和扩展名。
import os.path
filenamewithext = os.path.basename(filepath)
filename, ext = os.path.splitext(filenamewithext)
#print file name
print(filename)
#print file extension
print(ext)
解决方案 20:
嗯,我知道我迟到了
这是我的简单解决方案
file = '/foo/bar/whatever.ext'
extension = file.split('.')[-1]
print(extension)
#output will be ext
解决方案 21:
如果你喜欢正则表达式,那么这是真正的单行代码。即使中间有额外的“。”也没关系
import re
file_ext = re.search(r".([^.]+)$", filename).group(1)
查看结果:点击此处
解决方案 22:
您可以使用endswith来识别 python 中的文件扩展名
就像下面的例子
for file in os.listdir():
if file.endswith('.csv'):
df1 =pd.read_csv(file)
frames.append(df1)
result = pd.concat(frames)
解决方案 23:
试试这个:
files = ['file.jpeg','file.tar.gz','file.png','file.foo.bar','file.etc']
pen_ext = ['foo', 'tar', 'bar', 'etc']
for file in files: #1
if (file.split(".")[-2] in pen_ext): #2
ext = file.split(".")[-2]+"."+file.split(".")[-1]#3
else:
ext = file.split(".")[-1] #4
print (ext) #5
获取列表内的所有文件名
分割文件名并检查倒数第二个扩展名,它是否在 pen_ext 列表中?
如果是,则将其与最后一个扩展名合并,并将其设置为文件的扩展名
如果不是,则将最后一个扩展名作为文件的扩展名
然后检查一下
解决方案 24:
最简单的获取方式是使用mimtypes,下面是示例:
import mimetypes
mt = mimetypes.guess_type("file name")
file_extension = mt[0]
print(file_extension)
解决方案 25:
我确实迟到了,但如果有人想在不使用其他库的情况下实现这一点:
file_path = "example_tar.tar.gz"
file_name, file_ext = [file_path if "." not in file_path else file_path.split(".")[0], "" if "." not in file_path else file_path[file_path.find(".") + 1:]]
print(file_name, file_ext)
第二行基本上只是以下代码,但挤在一行中:
def name_and_ext(file_path):
if "." not in file_path:
file_name = file_path
else:
file_name = file_path.split(".")[0]
if "." not in file_path:
file_ext = ""
else:
file_ext = file_path[file_path.find(".") + 1:]
return [file_name, file_ext]
尽管这有效,但它可能无法对所有类型的文件起作用,具体来说.zshrc
,我建议使用os
的os.path.splitext
功能,如下例所示:
import os
file_path = "example.tar.gz"
file_name, file_ext = os.path.splitext(file_path)
print(file_name, file_ext)
干杯 :)
解决方案 26:
为了好玩...只需将扩展收集到一个字典中,并将它们全部跟踪到一个文件夹中。然后只需拉出您想要的扩展即可。
import os
search = {}
for f in os.listdir(os.getcwd()):
fn, fe = os.path.splitext(f)
try:
search[fe].append(f)
except:
search[fe]=[f,]
extensions = ('.png','.jpg')
for ex in extensions:
found = search.get(ex,'')
if found:
print(found)
解决方案 27:
此方法将需要一个字典、列表或集合。您可以使用内置字符串方法使用“.endswith”。这将在文件末尾的列表中搜索名称,只需使用即可完成str.endswith(fileName[index])
。这更多用于获取和比较扩展。
https://docs.python.org/3/library/stdtypes.html#string-methods
例1:
dictonary = {0:".tar.gz", 1:".txt", 2:".exe", 3:".js", 4:".java", 5:".python", 6:".ruby",7:".c", 8:".bash", 9:".ps1", 10:".html", 11:".html5", 12:".css", 13:".json", 14:".abc"}
for x in dictonary.values():
str = "file" + x
str.endswith(x, str.index("."), len(str))
示例 2:
set1 = {".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"}
for x in set1:
str = "file" + x
str.endswith(x, str.index("."), len(str))
示例 3:
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
for x in range(0, len(fileName)):
str = "file" + fileName[x]
str.endswith(fileName[x], str.index("."), len(str))
示例 4
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
str = "file.txt"
str.endswith(fileName[1], str.index("."), len(str))
示例 5、6、7 的输出
示例 8
fileName = [".tar.gz", ".txt", ".exe", ".js", ".java", ".python", ".ruby", ".c", ".bash", ".ps1", ".html", ".html5", ".css", ".json", ".abc"];
exts = []
str = "file.txt"
for x in range(0, len(x)):
if str.endswith(fileName[1]) == 1:
exts += [x]
解决方案 28:
如果你想提取最后一个文件扩展名(如果它有多个)
class functions:
def listdir(self, filepath):
return os.listdir(filepath)
func = functions()
os.chdir("C:\\UsersAsus-pcDownloads") #absolute path, change this to your directory
current_dir = os.getcwd()
for i in range(len(func.listdir(current_dir))): #i is set to numbers of files and directories on path directory
if os.path.isfile((func.listdir(current_dir))[i]): #check if it is a file
fileName = func.listdir(current_dir)[i] #put the current filename into a variable
rev_fileName = fileName[::-1] #reverse the filename
currentFileExtension = rev_fileName[:rev_fileName.index('.')][::-1] #extract from beginning until before .
print(currentFileExtension) #output can be mp3,pdf,ini,exe, depends on the file on your absolute directory
输出为 mp3,即使只有 1 个扩展名也可以工作
解决方案 29:
# try this, it works for anything, any length of extension
# e.g www.google.com/downloads/file1.gz.rs -> .gz.rs
import os.path
class LinkChecker:
@staticmethod
def get_link_extension(link: str)->str:
if link is None or link == "":
return ""
else:
paths = os.path.splitext(link)
ext = paths[1]
new_link = paths[0]
if ext != "":
return LinkChecker.get_link_extension(new_link) + ext
else:
return ""
解决方案 30:
a = ".bashrc"
b = "text.txt"
extension_a = a.split(".")
extension_b = b.split(".")
print(extension_a[-1]) # bashrc
print(extension_b[-1]) # txt
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件