当前位置:  开发笔记 > 编程语言 > 正文

如何从Python中的路径获取没有扩展名的文件名?

如何解决《如何从Python中的路径获取没有扩展名的文件名?》经验,为你挑选了11个好方法。

如何从Python中的路径获取没有扩展名的文件名?



1> Geo..:

获取没有扩展名的文件名称:

import os
print(os.path.splitext("/path/to/some/file.txt")[0])


对于任何想要和matteok一样的人,如果有多个点,splitext会在最后一个点分裂(所以`splitext('kitty.jpg.zip')`给`('kitty.jpg','.zip')`) .
请注意,此代码返回完整文件*path*(不带扩展名),而不仅仅是文件*name*.
如果文件名包含多个点怎么办?
如果这是一个足够普遍的操作,也许它应该值得它自己的官方命令?像os.path.filename(path_to_file)而不是os.path.splitext(os.path.basename(path_to_file))[0]

2> gimel..:

滚动吧:

>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'


它是"滚动你自己"的缩写,意思是"用自己构建"美式英语.
什么'滚动'是什么意思?
@ScottWilson:你仍然需要导入`os`.

3> 小智..:
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth


+1为此.3完全相同的答案,但这是最直接的答案.您可以使用`\``来显示代码,并使用"/somepath/hermanth.txt"作为路径实例.
@ hemanth.hm注意,在您提供的此语句中,不需要os.path.basename。os.path.basename应该仅用于从文件路径获取文件名。

4> bold..:

可读版本,pathlib在Python 3.4+中使用

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

将打印:

文件

如果路径可以是符号链接,则添加pathlib

file



5> Morgoth..:

为了完整起见,这里是pathlibpython 3.2+ 的解决方案:

from pathlib import Path

print(Path(your_path).resolve().stem)



6> 小智..:

如果要保留文件的路径,只需删除扩展名

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2


如果你想在最后一个时期拆分,请使用rsplit:`'/ root/dir /sub.exten/file.data.1.2.dat'.rsplit('.',1)`

7> 小智..:

https://docs.python.org/3/library/os.path.html

在python 3中,pathlib"pathlib模块提供了高级路径对象." 所以,

>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c



8> Dheeraj Chak..:

如果扩展中有多个点,则os.path.splitext()不起作用.

例如,images.tar.gz

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar

您可以在基本名称中找到第一个点的索引,然后将基本名称切片以仅获取没有扩展名的文件名.

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images


重要的一点是,像这样的一系列扩展很常见。`.tar.gz`.tar.bz`.tar.7z`

9> dlink..:

@ IceAdor在评论@ user2902201的解决方案中引用了rsplit.rsplit是支持多个句点的最简单的解决方案.

这里拼写出来:

file = 'my.report.txt'
print file.rsplit('.', 1)[0]

我的报告



10> Devin Jeanpi..:

但即使我导入操作系统,我也无法将其命名为path.basename.是否可以直接将其称为基本名称?

import os,然后使用 os.path.basename

importing os并不意味着你可以在os.foo不参考的情况下使用os.


这是一个占位符名称。(例如,考虑“路径”或“步行”)。

11> ScottMcC..:

我以为我会在os.path.splitext中使用一个变体,而不需要使用数组索引.

该函数始终返回一(root, ext)对,因此可以安全使用:

root, ext = os.path.splitext(path)

例:

>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有