답변:
확장자가없는 파일 이름 얻기 :
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
그래도 가져와야 합니다.
pathlib
Python 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
import
ING는 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'