Txt 확장자를 갖는 디렉토리에 있는 모든 파일을 찾을 수 있는 방법은 '' 의 파이썬?
'글롭' 사용할 수 있습니다.
import glob, os
os.chdir("/mydir")
for file in glob.glob("*.txt"):
print(file)
또는 단순히 ['오스트리스타디르'] [2]:
import os
for file in os.listdir("/mydir"):
if file.endswith(".txt"):
print(os.path.join("/mydir", file))
또는 스케쳐내 트래버스하기 디렉터리인 경로재설정 ['오스왈크'] [3]:
import os
for root, dirs, files in os.walk("/mydir"):
for file in files:
if file.endswith(".txt"):
print(os.path.join(root, file))
[2]: https://docs.python.org/2/library/os.html # 오스트리스타디르 [3]: https://docs.python.org/2/library/os.html # 오스왈크
[글롭] 사용하여 (http://docs.python.org/library/glob.html).
>>> import glob
>>> glob.glob('./*.txt')
['./outline.txt', './pip-log.txt', './test.txt', './testingvim.txt']
뭐 그런 어떻게해야합니다 작업
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.txt'):
print file
I like 오스왈크 ():
import os, os.path
for root, dirs, files in os.walk(dir):
for f in files:
fullpath = os.path.join(root, f)
if os.path.splitext(fullpath)[1] == '.txt':
print fullpath
또는 만들어낸다.
import os, os.path
fileiter = (os.path.join(root, f)
for root, _, files in os.walk(dir)
for f in files)
txtfileiter = (f for f in fileiter if os.path.splitext(f)[1] == '.txt')
for txt in txtfileiter:
print txt
간단히 사용할 수 있습니다 (['파트리브'] https://docs.python.org/library/pathlib.html # 파트리브) s ['글롭'] (https://docs.python.org/library/pathlib.html # 파트리발파토스그로브), 1< /sup> sup> <;;:
import pathlib
list(pathlib.Path('your_directory').glob('*.txt'))
또는 루프:
for txt_file in pathlib.Path('your_directory').glob('*.txt'):
# do something with "txt_file"
스케쳐내 지그로프 (& # 39, /.txt) '이' 반복 사용할 수 있습니다.
,, '이' 파트리브 < sup> 1< /sup> 모듈에서는 표준 라이브러리에 존재하는 파이썬 3.4 에 포함되어 있었다. 그러나 뒤로를 포트+ 대해서도 해당 모듈에서는 tfsnap 파이썬 버전을 설치할 수 있습니다 (즉, '등을 사용하여 콘다' 또는 ''). ['파트리브'] (https://pypi.python.org/pypi/pathlib/) 및 ['pathlib2'] (https://pypi.python.org/pypi/pathlib2/).
import glob
for f in glob.iglob("/mydir/*/*.txt"): # generator, search immediate subdirectories
print f
print glob.glob1("/mydir", "*.tx?") # literal_directory, basename_pattern
import fnmatch, os
print fnmatch.filter(os.listdir("/mydir"), "*.tx?") # include dot-files
[1]: http://docs.python.org/library/glob.html # 글로브룩스그로브 [2]: http://docs.python.org/library/fnmatch.html # 프 마치오필터
path.py 은 또 다른 대안: https://github.com/jaraco/path.py
from path import path
p = path('/path/to/the/directory')
for f in p.files(pattern='*.txt'):
print f
빠른) 에서 사용한 방법을 오스릭스칸돈 이어 재귀 함수. 지정된 폴더에 있는 모든 파일을 확장명은 및 하위 검색합니다.
import os
def findFilesInFolder(path, pathList, extension, subFolders = True):
""" Recursive function to find all files of an extension type in a folder (and optionally in all subfolders too)
path: Base directory to find files
pathList: A list that stores all paths
extension: File extension to find
subFolders: Bool. If True, find files in all subfolders under path. If False, only searches files in the specified folder
"""
try: # Trapping a OSError: File permissions problem I believe
for entry in os.scandir(path):
if entry.is_file() and entry.path.endswith(extension):
pathList.append(entry.path)
elif entry.is_dir() and subFolders: # if its a directory, then repeat process as a nested function
pathList = findFilesInFolder(entry.path, pathList, extension, subFolders)
except OSError:
print('Cannot access ' + path +'. Probably a permissions error')
return pathList
dir_name = r'J:\myDirectory'
extension = ".txt"
pathList = []
pathList = findFilesInFolder(dir_name, pathList, extension, True)
검색하였다면 10,000s 포함된 파일, 디렉터리 목록을 통해 추가 됩니다 비효율적이었습니다. # 39, & # 39 Yielding&. 가 더 나은 결과를 솔루션이므로 나는 한 마리의 다테프라임 변환하십시오 출력입니다 기능도 포함되어 있다.
"'파이썬 가져오기의 os 가져오기의 re 가져오기의 pd 로 판다 np 누마피 임포트합니다 있다
데프 핀드필징폴더이레두 (경로 확장명으로, 콩탱스테스트 = & # 39, & # 39, & # 39, & # 39 서브폴더에 에스클로데테스트 =, = True,): " " ";; 파일을 찾을 수 있는 모든 재귀 함수 (또는 모든 서브폴더에 너무) 폴더란 확장명으로 유형
경로: 파일을 찾기 위해 기본 디렉터리 확장명은: 파일 확장자 com/go/downloads_kr. 예를 들어, # 39, & # 39 txt&. 정규식이. # 39, & # 39 또는 ls\d&. ls1 일치시키려면 ls2 상술합니다 ls3, 콩탱스테스트: 이 텍스트 파일 목록이 포함되어 있으면 문장열 aspt 불과했다. & # 39, & # 39 무시할 경우, (또는 빈) 서브폴더에: 부울. 이것이 사실일 경우, 모든 파일 찾기 경로를 따라 서브폴더에. False 이면 지정된 폴더에 파일을 미디어만을 검색 에스클로데테스트: 텍스트 구체화하십시오. & # 39, & # 39 무시할 경우. 이 경우 경로 텍스트 문자열을 제외합니다. " " ";; 만약 유형 (콩탱스테스트) = str. # 문자열으로 경우 아니라 목록 콩탱스테스트 = [콩탱스테스트]
미르게소비에 = 레이콩필레 (& # 39 .& # 39;; + + $ & # 39, & # 39 확장명은;) 파일 확장자는 끝에 있고 앞에는 a # 은 합니다.
종료기: # 트랩핑 한 로저로 또는 피르노푸네르로: I believe 파일 권한 문제 항목에 대한 오스릭스칸돈 이어 (경로): 만약 entry.is_file () 와 미르게소비에이시치 (엔트리드패스): #
부울 = [True 를 txt 에 콩탱스테스트 (에스클로데테스트 = & # 39, & # 39, txt 엔트리드패스 및 있는 경우 또는 에스클로데테스트 엔트리드패스 포함되지 않음)]
만약 렌 (부울) = 렌 (콩탱스테스트): 일드 랑리그스테 (), 랑리그스테 .st_size .st_atime_ns 랑리그스테 .st_mtime_ns .st_ctime_ns 엔트리드패스 랑리그스테 () () (),,
엘리프 entry.is_dir () 와 서브폴더에: 그 후 경우 # 디렉터리입니다 반복하십시오 네스트된 프로세스의 기능 핀드필징폴더이레두 (엔트리드패스 확장명으로 콩탱스테스트 서브폴더에,) 의 출력 그러나 로저로 ose 있다. 보기인쇄 (& # 39, & # 39 액세스할 수 없습니다. + 삼중평균 +& # 39;. 아마 오류 & # 39, 권한, ose) 그러나 피르노푸네르로 프노프 있다. 보기인쇄 (삼중평균 +& # 39. & # 39, 프노프 찾을 수 없습니다.)
데프 핀드필징폴더이엘단짓드프 (경로 확장명으로, 콩탱스테스트 서브폴더에, & # 39, & # 39, 에스클로데테스트 =, = True): " " ";; 데이터를 변환하는 반환되었습니다 핀드필징폴더이레두 다테프라임 만들고, 및 판다. 파일을 찾을 수 있는 모든 재귀 함수 (또는 모든 서브폴더에 너무) 폴더란 확장명으로 유형
경로: 파일을 찾기 위해 기본 디렉터리 확장명은: 파일 확장자 com/go/downloads_kr. 예를 들어, # 39, & # 39 txt&. 정규식이. # 39, & # 39 또는 ls\d&. ls1 일치시키려면 ls2 상술합니다 ls3, 콩탱스테스트: 이 텍스트 파일 목록이 포함되어 있으면 문장열 aspt 불과했다. & # 39, & # 39 무시할 경우, (또는 빈) 서브폴더에: 부울. 이것이 사실일 경우, 모든 파일 찾기 경로를 따라 서브폴더에. False 이면 지정된 폴더에 파일을 미디어만을 검색 에스클로데테스트: 텍스트 구체화하십시오. & # 39, & # 39 무시할 경우. 이 경우 경로 텍스트 문자열을 제외합니다. " " ";;
,, 크레이션티머스 filesize 액세스 시간 모디피카티온티머스 패스이므로 = zip (* 핀드필징폴더이레두 (경로 확장명으로 콩탱스테스트 서브폴더에,)) df = pd. 다테프라임 ({
})
df [# 39, & # 39 FLS_File_Modification_Date&;] = pd.to_datetime (df [# 39, & # 39, FLS_File_Modification_Date&], infer_datetime_format = True) df [# 39, & # 39 FLS_File_Creation_Date&;] = pd.to_datetime (df [# 39, & # 39, FLS_File_Creation_Date&], infer_datetime_format = True) df [# 39, & # 39 FLS_File_Access_Date&;] = pd.to_datetime (df [# 39, & # 39, FLS_File_Access_Date&], infer_datetime_format = True)
df 반품하십시오.
콩탱스테스트 = []
df = 핀드필징폴더이엘단짓드프 (경로, 확장자, 콩탱스테스트, 서브폴더에 = True) "'
from os import listdir
from os.path import isfile, join
path = "/dataPath/"
onlyTxtFiles = [f for f in listdir(path) if isfile(join(path, f)) and f.endswith(".txt")]
print onlyTxtFiles
I did 테스트 (파이썬 3.6.4, W7x64) 확인할 수 있는 가장 빠른 방법은 없고, 1 개의 폴더 목록을 가져올 수 있으며, 전체 파일 경로를 서브디렉토리가 파일내에서 sys_memsize 특정 확장자입니다.
이를 위해 ',' () 는 이 작업에 대한 짧은 오스트리스타디르 가장 빠르고 1.7x 빨리 다음 베스트중에: 오스왈크 () ',', ' (수신기마다 휴식!)' 보다 '2.7x 빨리 파트리브 3.2x 오스릭스칸돈 이어 ()' 와 '보다' 글롭 3.3x. 제발 그 결과를 바꿀 수 있다는 것을 명심해야 할 때, 재귀 결과를 얻을 수 있습니다. 한 가지 방법은, 그렇지 않은 경우 아래 복사 / 붙여넣기 desktopplatforms 오로라 추가하기에서는 오레스트 오레스테스 검색할 때 찾을 수 없는 것이다 ()
import os
import pathlib
import timeit
import glob
def a():
path = pathlib.Path().cwd()
list_sqlite_files = [str(f) for f in path.glob("*.sqlite")]
def b():
path = os.getcwd()
list_sqlite_files = [f.path for f in os.scandir(path) if os.path.splitext(f)[1] == ".sqlite"]
def c():
path = os.getcwd()
list_sqlite_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith(".sqlite")]
def d():
path = os.getcwd()
os.chdir(path)
list_sqlite_files = [os.path.join(path, f) for f in glob.glob("*.sqlite")]
def e():
path = os.getcwd()
list_sqlite_files = [os.path.join(path, f) for f in glob.glob1(str(path), "*.sqlite")]
def f():
path = os.getcwd()
list_sqlite_files = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(".sqlite"):
list_sqlite_files.append( os.path.join(root, file) )
break
print(timeit.timeit(a, number=1000))
print(timeit.timeit(b, number=1000))
print(timeit.timeit(c, number=1000))
print(timeit.timeit(d, number=1000))
print(timeit.timeit(e, number=1000))
print(timeit.timeit(f, number=1000))
결과:
# Python 3.6.4
0.431
0.515
0.161
0.548
0.537
0.274
기능적 솔루션을 함께 하위 디렉터리.
from fnmatch import filter
from functools import partial
from itertools import chain
from os import path, walk
print(*chain(*(map(partial(path.join, root), filter(filenames, "*.txt")) for root, _, filenames in walk("mydir"))))