Cara untuk mendapatkan nama file tanpa ekstensi dari sebuah jalan di Python?
Mendapatkan nama file tanpa ekstensi:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Cetakan:
/path/to/some/file
Important Catatan: Jika nama file yang memiliki beberapa titik, hanya perpanjangan setelah yang terakhir dihapus. Misalnya:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Cetakan:
/path/to/some/file.txt.zip
Lihat jawaban di bawah ini jika anda perlu untuk menangani kasus itu.
Anda dapat membuat anda sendiri dengan:
>>> 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'
Catatan penting: Jika ada lebih dari satu .
di nama file, hanya yang terakhir dihapus. Misalnya:
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
Lihat di bawah untuk jawaban yang lain bahwa alamat itu.
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
https://docs.python.org/3/library/os.path.html
Di python 3 pathlib "pathlib modul menawarkan tingkat tinggi jalan benda." jadi,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
os.jalan.splitext() tidak't bekerja jika ada beberapa titik-titik dalam ekstensi.
Misalnya, 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
Anda hanya dapat menemukan indeks dari dot pertama di basename dan kemudian iris basename hanya untuk mendapatkan nama file tanpa ekstensi.
>>> 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
Tetapi bahkan ketika saya import os, saya tidak bisa menyebutnya jalan.basename. Adalah mungkin untuk menyebutnya secara langsung basename?
impor os
, dan kemudian menggunakan os.jalan.basename
impor a'ing
osdoesn't berarti anda dapat menggunakan
os.footanpa mengacu pada
os`.
Pikir saya akan melemparkan dalam variasi penggunaan os.jalan.splitext tanpa perlu menggunakan array pengindeksan.
Fungsi selalu kembali (akar, ext)
pasangan sehingga aman untuk digunakan:
akar, ext = os.jalan.splitext(path)
Contoh:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
impor os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Ini kembali filename
tanpa ekstensi
(C:\Users\Public\Videos\Sample Video\satwa liar)
temp = os.path.splitext(filename)[0]
Sekarang anda bisa mendapatkan hanya filename
dari temp dengan
os.path.basename(temp) #this returns just the filename (wildlife)
Beberapa ekstensi menyadari prosedur. Bekerja untuk str
dan unicode
jalan. Bekerja di Python 2 dan 3.
import os
def file_base_name(file_name):
if '.' in file_name:
separator_index = file_name.index('.')
base_name = file_name[:separator_index]
return base_name
else:
return file_name
def path_base_name(path):
file_name = os.path.basename(path)
return file_base_name(file_name)
Perilaku:
>>> path_base_name('file')
'file'
>>> path_base_name(u'file')
u'file'
>>> path_base_name('file.txt')
'file'
>>> path_base_name(u'file.txt')
u'file'
>>> path_base_name('file.tar.gz')
'file'
>>> path_base_name('file.a.b.c.d.e.f.g')
'file'
>>> path_base_name('relative/path/file.ext')
'file'
>>> path_base_name('/absolute/path/file.ext')
'file'
>>> path_base_name('Relative\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('/path with spaces/file.ext')
'file'
>>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
'file'
>>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
'file name with spaces'
Metode lain yang don't menghapus beberapa ekstensi. Beberapa juga memiliki masalah dengan nama file yang don't memiliki ekstensi. Ini cuplikan yang berkaitan dengan contoh dan bekerja di kedua Python 2 dan 3. Ia meraih basename dari jalan, membagi nilai pada titik-titik, dan pengembalian yang pertama yang merupakan bagian awal dari nama berkas.
import os
def get_filename_without_extension(file_path):
file_basename = os.path.basename(file_path)
filename_without_extension = file_basename.split('.')[0]
return filename_without_extension
Berikut ini's seperangkat contoh-contoh untuk menjalankan:
example_paths = [
"FileName",
"./FileName",
"../../FileName",
"FileName.txt",
"./FileName.txt.zip.asc",
"/path/to/some/FileName",
"/path/to/some/FileName.txt",
"/path/to/some/FileName.txt.zip.asc"
]
for example_path in example_paths:
print(get_filename_without_extension(example_path))
Dalam setiap kasus, nilai yang tercetak adalah:
FileName
Pada sistem Windows saya menggunakan drivername awalan juga, seperti:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
Jadi karena saya tidak perlu huruf drive atau direktori nama, saya gunakan:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
Kita bisa melakukan beberapa sederhana split
/ pop
sihir seperti yang terlihat di sini (https://stackoverflow.com/a/424006/1250044), untuk mengekstrak file (menghormati windows dan POSIX perbedaan).
def getFileNameWithoutExtension(path):
return path.split('\\').pop().split('/').pop().rsplit('.', 1)[0]
getFileNameWithoutExtension('/path/to/file-0.0.1.ext')
# => file-0.0.1
getFileNameWithoutExtension('\\path\\to\\file-0.0.1.ext')
# => file-0.0.1
import os
list = []
def getFileName( path ):
for file in os.listdir(path):
#print file
try:
base=os.path.basename(file)
splitbase=os.path.splitext(base)
ext = os.path.splitext(base)[1]
if(ext):
list.append(base)
else:
newpath = path+"/"+file
#print path
getFileName(newpath)
except:
pass
return list
getFileName("/home/weexcel-java3/Desktop/backup")
print list