답변:
확장자가없는 파일 이름 얻기 :
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
인쇄물:
/path/to/some/file
중요 참고 : 파일 이름에 여러 개의 점이있는 경우 마지막 점 이후의 확장자 만 제거됩니다. 예를 들면 다음과 같습니다.
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
인쇄물:
/path/to/some/file.txt.zip
해당 사례를 처리해야하는 경우 아래의 다른 답변을 참조하십시오.
splitext('kitty.jpg.zip')제공 ('kitty.jpg', '.zip')).
splitext(basename('/some/path/to/file.txt'))[0](나는 항상하고있는 것처럼 보인다)
당신은 자신을 만들 수 있습니다 :
>>> 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'
중요 사항 : .파일 이름에 둘 이상이 있으면 마지막 파일 만 제거됩니다. 예를 들면 다음과 같습니다.
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
이를 해결하는 다른 답변은 아래를 참조하십시오.
os그래도 가져와야 합니다.
pathlibPython 3.4 이상에서 사용
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
돌아올 것이다
'file'
os.path솔루션이 만 (또는 확장을 제거합니다 suffix으로, pathlib통화 그것). Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')것이 좋은 방법 이라고 생각 합니다. 까지까지 반복하고 싶을 것입니다 p.suffix == ''.
Python 3.4 이상에서는 pathlib솔루션을 사용할 수 있습니다
from pathlib import Path
print(Path(your_path).resolve().stem)
resolve()는 여러 도트 문제를 해결하는 데 도움이되기 때문 입니다. 경로가 './foo.tar.gz'인 경우 인덱스 사용에 대한 아래의 답변이 작동하지 않습니다.
https://docs.python.org/3/library/os.path.html
파이썬 3에서 pathlib "pathlib 모듈은 높은 수준의 경로 객체를 제공합니다." 그래서,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
파일 경로를 유지하고 확장명을 제거하려면
>>> 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)
확장에 여러 개의 점이 있으면 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
'haystack'.index('needle')(상기 경우의 도트 바늘이 경우에 ValueError 예외가 발생 .) 건초에서 발견되지 않는다. 확장자가없는 파일도 존재합니다.
그러나 os를 가져올 때도 path.basename이라고 부를 수 없습니다. 기본 이름으로 직접 호출 할 수 있습니까?
import os을 사용하여 os.path.basename
importING는 os당신이 사용할 수있는 것은 아닙니다 os.foo을 참조하지 않고 os.
from os import foo.
os라는 멤버가 있으면 매우 비표준 버전의 모듈이 있습니다 foo.
path또는 walk).
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'
다른 방법은 여러 확장을 제거하지 않습니다. 일부는 확장자가없는 파일 이름에 문제가 있습니다. 이 스 니펫은 두 인스턴스를 모두 처리하고 Python 2와 3에서 모두 작동합니다. 경로에서 기본 이름을 가져와 점으로 값을 분할하고 파일 이름의 첫 부분 인 첫 번째 값을 반환합니다.
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
실행할 예제 세트는 다음과 같습니다.
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))
모든 경우에 인쇄되는 값은 다음과 같습니다.
FileName
Path('/path/to/file.txt').stem. (1,23μs vs 8.39μs)
다중 확장 인식 절차 작동 str및 unicode경로. 파이썬 2와 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)
행동:
>>> 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'
편의상 두 가지 방법을 래핑하는 간단한 함수는 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로 테스트했습니다.
이 문제를 해결하는 가장 쉬운 방법은
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
이렇게하면 시간과 계산 비용이 절약됩니다.
매우 간단하게 다른 모듈은 없습니다 !!!
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)
파일 이름을 추출하기 위해 여기 ( https://stackoverflow.com/a/424006/1250044 )에서 간단한 split/ pop마법을 수행 할 수 있습니다 ( 창과 POSIX의 차이를 고려하여).
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 파일 이름, file_extension = os.path.splitext ( '/ d1 / d2 / example.cs') 파일 이름은 '/ d1 / d2 / example'입니다 file_extension은 '.cs'