Python을 사용하여 폴더에서 최신 파일을 가져 오는 방법
사용하여 최신 폴더 파일을 가져와야합니다. 코드를 사용하는 동안 :
max(files, key = os.path.getctime)
아래 오류가 발생합니다.
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'
files
변수에 할당 된 것이 잘못되었습니다. 다음 코드를 사용하십시오.
import glob
import os
list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
print latest_file
max(files, key = os.path.getctime)
매우 불완전한 코드입니다. 무엇입니까 files
? 에서 나오는 파일 이름 목록 일 것입니다 os.listdir()
.
그러나이 목록에는 경로가 공통적 파일 이름 부분 ( "basenames"이라고도 함)만이라고합니다. 그것을 사용하는 사용하기 그것을 가져 오는 데 사용되는 경로와 결합해야합니다.
예 : (예상되지 않음) :
def newest(path):
files = os.listdir(path)
paths = [os.path.join(path, basename) for basename in files]
return max(paths, key=os.path.getctime)
생성 시간별로 항목을 정렬하십시오. 아래 예제는 폴더의 파일을 정렬하고 최신 요소를 가져옵니다.
import glob
import os
files_path = os.path.join(folder, '*')
files = sorted(
glob.iglob(files_path), key=os.path.getctime, reverse=True)
print files[0]
효율적이므로 더 glob.iglob()
대신 사용 하는 것이 좋습니다 glob.glob()
.
glob.iglob ()은 모든 값을 동시에 저장하지 않고 glob ()과 동일한 값을 반복하는 반복 반환합니다.
즉, glob.iglob()
더 많이입니다.
주로 아래 코드를 사용하여 내 패턴과 일치하는 최신 파일을 찾습니다.
LatestFile = max(glob.iglob(fileNamePattern),key=os.path.getctime)
참고 : max
기능의 변형이 있습니다. 최신 파일을 찾는 경우 아래 변형을 사용합니다.max(iterable, *[, key, default])
이터 러블이 필요 첫 번째 요청 변수는 이터 러블이어야합니다. 최대 nums를 찾는 경우 다음 변형을 사용할 수 있습니다.max (num1, num2, num3, *args[, key])
(답변 개선을 위해 수정 됨)
먼저 get_latest_file 함수를 정의하십시오.
def get_latest_file(path, *paths):
fullpath = os.path.join(path, paths)
...
get_latest_file('example', 'files','randomtext011.*.txt')
독독 사용할 수도 있습니다!
def get_latest_file(path, *paths):
"""Returns the name of the latest (most recent) file
of the joined path(s)"""
fullpath = os.path.join(path, *paths)
Python 3을 사용하는 경우 대신 iglob 을 사용할 수 있습니다 .
최신 파일의 이름을 반환하는 완전한 코드 :
def get_latest_file(path, *paths):
"""Returns the name of the latest (most recent) file
of the joined path(s)"""
fullpath = os.path.join(path, *paths)
files = glob.glob(fullpath) # You may use iglob in Python3
if not files: # I prefer using the negation
return None # because it behaves like a shortcut
latest_file = max(files, key=os.path.getctime)
_, filename = os.path.split(latest_file)
return filename
나는 위의 제안을 사용하려고 시도했고 내 프로그램이 추락했다. 내가 식별하려는 파일이 사용되었고 'os.path.getctime'을 사용하려고 할 때 추락했다는 것을 알기보다. 마침내 나를 위해 일한 것은 다음과 같습니다.
files_before = glob.glob(os.path.join(my_path,'*'))
**code where new file is created**
new_file = set(files_before).symmetric_difference(set(glob.glob(os.path.join(my_path,'*'))))
이 코드는 두 세트의 파일 목록 사이에 흔하지 않은 객체를 가져옵니다. 가장 우아하지 않으며 동시에 여러 파일이 생성되면 아마도 안정적이지 않을 것입니다
Windows (0.05s)에서 훨씬 더 빠른 방법은 다음과 같은 작업을 수행하는 bat 스크립트를 호출합니다.
get_latest.bat
@echo off
for /f %%i in ('dir \\directory\in\question /b/a-d/od/t:c') do set LAST=%%i
%LAST%
\\directory\in\question
조사 할 디렉토리는 어디에 있습니까 ?
get_latest.py
from subprocess import Popen, PIPE
p = Popen("get_latest.bat", shell=True, stdout=PIPE,)
stdout, stderr = p.communicate()
print(stdout, stderr)
파일을 찾으면 stdout
경로 stderr
가 None입니다.
사용하여 stdout.decode("utf-8").rstrip()
파일 이름의 사용 가능한 문자열 표현을 얻을 수 있습니다.
참고 URL : https://stackoverflow.com/questions/39327032/how-to-get-the-latest-file-in-a-folder-using-python
'IT' 카테고리의 다른 글
Ubuntu에 새로 설치 한 후 사용자 'root'@ 'localhost'(암호 : YES 사용)에 대한 액세스가 거부되었습니다. (0) | 2020.09.04 |
---|---|
Android CollapsingToolbarLayout 축소 리스너 (0) | 2020.09.04 |
URL이 유효한지 확인하는 방법 (0) | 2020.09.04 |
지난주 데이터를 선택하는 MySQL 쿼리? (0) | 2020.09.04 |
Node.js 앱은 포트를 차단하는 다른 프로세스가 없더라도 포트 80에서 사용할 수 없습니다. (0) | 2020.09.04 |