How to get only the name of the path with python?
PythonPython Problem Overview
I have the following string :
a = "/home/user/Downloads/repo/test.txt"
My goal is just to create a string which contains only test
, hwo can I do this ?
actually a comes from
f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt")
and a is equal to a = f.name
but I realized f.name
does not give me just the name of the file.
Python Solutions
Solution 1 - Python
In Python 3.4+, you can use the pathlib
module (included in Python's standard library):
>>> from pathlib import Path
>>> p = Path("/home/user/Downloads/repo/test.txt")
>>> print(p.stem)
test
>>> print(p.name)
test.txt
Solution 2 - Python
Use the os.path
module to work with paths; the os.path.basename()
function gives you the last part after the last path separator, and os.path.splitext()
gives you the filename with the extension split off:
import os.path
basename = os.path.splitext(os.path.basename(f.name))[0]
Using the os.path
functions ensures that your code will continue to work correctly on different operating systems, even if the path separators are different.
In Python 3.4 or newer (or as a separate backport install), you can also use the pathlib
library, which offers a more object-oriented approach to path handling. pathlib.Path()
objects have a .stem
attribute, which is the final component without the extension suffix:
try:
import pathlib
except ImportError:
# older Python version, import the backport instead
import pathlib2 as pathlib
basename = pathlib.Path(f.name).stem
Demo:
>>> import os.path
>>> a = "/home/user/Downloads/repo/test.txt"
>>> os.path.basename(a)
'test.txt'
>>> os.path.splitext(os.path.basename(a))
('test', '.txt')
>>> os.path.splitext(os.path.basename(a))[0]
'test'
>>> import pathlib
>>> pathlib.Path(a)
PosixPath('/home/user/Downloads/repo/test.txt')
>>> pathlib.Path(a).stem
'test'
Solution 3 - Python
It seems that you're either looking for os.path.basename
or os.path.splitext
:
>>> import os.path
>>> os.path.basename("/var/log/err.log")
'err.log'
>>> os.path.splitext(os.path.basename("/var/log/err.log"))
('err', '.log')
>>> os.path.splitext(os.path.basename("/var/log/err.log"))[0]
'err'
>>>