Python'daki bir yoldan uzantı olmadan dosya adını nasıl alabilirim?
Python'daki bir yoldan uzantı olmadan dosya adını nasıl alabilirim?
Yanıtlar:
Uzantı olmadan dosyanın adını alma:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Baskılar:
/path/to/some/file
İçin belgeleros.path.splitext .
Önemli Not: Dosya adında birden çok nokta varsa, yalnızca sonuncusundan sonraki uzantı kaldırılır. Örneğin:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Baskılar:
/path/to/some/file.txt.zip
Bu durumu ele almanız gerekiyorsa aşağıdaki diğer yanıtlara bakın.
splitext('kitty.jpg.zip')verir ('kitty.jpg', '.zip')).
splitext(basename('/some/path/to/file.txt'))[0](ki her zaman yapıyor gibi görünüyor)
Şunları yapabilirsiniz:
>>> 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'
Önemli not: .Dosya adında birden fazla varsa , yalnızca sonuncusu kaldırılır. Örneğin:
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
Bu konuyu ele alan diğer cevaplar için aşağıya bakın.
os.
pathlibPython 3.4 ve sonraki sürümlerinde kullanma
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
geri dönücek
'file'
os.pathçözeltiler, bu sadece (veya bir uzantı şerit olacak suffixşekilde, pathlibaramaları bu). Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')yolu bu. Muhtemelen şu ana kadar döngüde bulunmak istersiniz p.suffix == ''.
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
`bir yol örneği olarak kodunu ve "/somepath/hermanth.txt" göstermek için.
os.path.basenamegerekli olmadığını unutmayın. os.path.basenameyalnızca dosya adını dosya yolundan almak için kullanılmalıdır.
Python 3.4+ sürümünde pathlibçözümü kullanabilirsiniz
from pathlib import Path
print(Path(your_path).resolve().stem)
resolve(), çoklu nokta sorunuyla başa çıkmaya yardımcı olmaktır. Dizin kullanımıyla ilgili aşağıdaki yanıt, yol './foo.tar.gz' ise işe yaramaz
https://docs.python.org/3/library/os.path.html
Python 3'de pathlib "pathlib modülü üst düzey yol nesneleri sunar." yani,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
Dosyanın yolunu korumak ve yalnızca uzantıyı kaldırmak istiyorsanız
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
Uzantıda birden çok nokta varsa os.path.splitext () çalışmaz .
Örneğin, 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
Sadece taban adındaki ilk noktanın dizinini bulabilir ve daha sonra uzantı olmadan sadece dosya adını almak için taban adını dilimleyebilirsiniz.
>>> 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
'haystack'.index('needle')(yukarıdaki durumda nokta, iğne eğer bir ValueError istisna atar .) samanlıkta bulunamadı. Uzantısı olmayan dosyalar da vardır.
Ancak işletim sistemini içe aktardığımda bile, path.basename olarak adlandıramıyorum. Doğrudan basename olarak adlandırmak mümkün mü?
import osve ardından os.path.basename
importing os, os.foobaşvurmadan kullanabileceğiniz anlamına gelmez os.
from os import foo.
osadlı bir üyesi varsa modülün çok standart olmayan bir sürümüne sahipsiniz foo.
pathveya walk).
Dizi indeksleme kullanmadan os.path.splitext kullanımı için bir varyasyon atmak düşündüm .
İşlev her zaman bir (root, ext)çift döndürür, böylece kullanımı güvenlidir:
root, ext = os.path.splitext(path)
Misal:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
Diğer yöntemler birden fazla uzantıyı kaldırmaz. Bazılarının uzantıları olmayan dosya adlarında da sorunları vardır. Bu snippet hem örneklerle ilgilenir hem de Python 2 ve 3'te çalışır. Taban adını yoldan alır, değeri noktalara böler ve dosya adının ilk kısmı olan ilkini döndürür.
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
Çalıştırmak için bir dizi örnek:
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))
Her durumda, yazdırılan değer:
FileName
Path('/path/to/file.txt').stem. (1,23μs vs 8.39μs)
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Bu filename, extension(C: \ Users \ Genel \ Videolar \ Örnek Videolar \ vahşi yaşam) olmadan döndürür
temp = os.path.splitext(filename)[0]
Şimdi sadece filenametemp ile alabilirsiniz
os.path.basename(temp) #this returns just the filename (wildlife)
Çoklu uzatma farkında bir prosedür. Çalışır strve unicodeyollar. Python 2 ve 3'te çalışır.
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)
Davranış:
>>> 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'
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
Kolaylık sağlamak için, iki yöntemi saran basit bir işlev os.path:
def filename(path):
"""Return file name without extension from path.
See https://docs.python.org/3/library/os.path.html
"""
import os.path
b = os.path.split(path)[1] # path, *filename*
f = os.path.splitext(b)[0] # *file*, ext
#print(path, b, f)
return f
Python 3.5 ile test edilmiştir.
bunu çözmenin en kolay yolu
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
bu size zaman ve hesaplama maliyeti kazandırır.
Çok çok çok basit başka modül yok !!!
import os
p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
# Get the filename only from the initial file path.
filename = os.path.basename(p)
# Use splitext() to get filename and extension separately.
(file, ext) = os.path.splitext(filename)
# Print outcome.
print("Filename without extension =", file)
print("Extension =", ext)
Dosya adını ayıklamak için (pencerelere ve POSIX farklılıklarına saygı göstererek) burada görüldüğü gibi basit split/ popsihir yapabiliriz ( https://stackoverflow.com/a/424006/1250044 ).
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
import os dosya adı, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') dosya adı '/ d1 / d2 / örnek' file_extension '.cs'