2016-07-18 7 views
0

업데이트 : 파이썬에서 오늘 날짜의 파일을 검색하려고 시도하는 중, 아래의 답변 섹션에 최종 코드를 게시했습니다.파이썬에서 오늘 날짜로 파일 검색

프로그램에서 만든 로그가있는 폴더가 있습니다. 로그 제목에는 사용자의 이름과 로그가 작성된 날짜가 들어 있습니다. 오늘의 날짜를 포함하는 open의 로그에 Python 스크립트를 작성하려고합니다. 오늘 datetime을 사용하면 오늘 날짜를 얻고 은 오늘 logFolderContent [x] 날짜를 검색하는 데 사용됩니다. 나는이 스크립트의 작은 버전을 작동 (3 개의 문자열 검색) 할 수 있었지만 문제를 가진 폴더를 찾기 위해 그것을 다시 작성하려고 시도했다.

아래는 내 스크립트입니다. @Steven Summers의 도움으로 제 코드가 좀 더 깔끔합니다. 이전 코드를 새 코드로 바꿨습니다. 나는 그 이후로 스크립트가 오늘날의 파일과 상호 작용할 때 충돌한다는 것을 깨달았습니다. 내가) ( 라인 logFolderContent.reverse를 제거하면

Today's Date: 2016-07-18 

log folder content ['Thumbs.db', '2016-07-18-WIN7-BUYING.txt', (etc...) '2016-04-20-ERIC-NEW.txt'] 
Non-text file found and ignored 
Thumbs.db 
Traceback (most recent call last): 
    File "U:/JustinG/Python/Directory/Complete_1.py", line 24, in <module> 
    print("eligibleLogs[i] = ", eligibleLogs[i]) 
IndexError: list index out of range 

process finished with exit code 1 

이 스크립트는 모든 파일 이름 (그들은 아래의 요건을 충족하고 의미) 및 인쇄 : 여기

import os 
import datetime 

# <><><><><><><><><><><><><><>  Get Today's Date <><><><><><><><><><>  
today = datetime.date.today() 
today = str(today) 
runDate = today 
print("Today's Date:", today, "\n\n\n") 

# <><><><><><><><><><><><><>  Get all today's files <><><><><><><><><>  
logFolder = r"\\foamfile\logs\POHistory" 
logFolderContent = os.listdir(logFolder) # WORKING 
logFolderContent.reverse() 
print("log folder content", logFolderContent) 
countFolderContent = len(logFolderContent) # WORKING 
print("Total Files in Folder:", countFolderContent) 
eligibleLogs = [] 
continueLogSearch = "true" 
x = 0 
for i, file in enumerate(logFolderContent): 
    if file.startswith(today): 
     eligibleLogs.append(i) 
     print("eligibleLogs[i] = ", eligibleLogs[i]) 
    elif not file.endswith(".txt"): 
     print("Non-text file found and ignored") 
    print(logFolderContent[i]) 

는 출력 오늘 날짜로 파일 이름에 도달하면 충돌이 발생합니다.

+0

"logFolderContent 그룹을 바꾸면"무엇을 의미합니까? 폴더에 실제로 584 개의 파일이 있습니까? .txt없이 15 개가 있습니까? – pwnsauce

+0

@pwnsauce. list.reverse(). [file1, file2, file3] 대신 [file3, file2, file1] – Justlieb

+0

@pwnsauce 코드 아래에 출력물을 넣을 것입니다. 아마 그게 도움이 될거야. – Justlieb

답변

2

I가 아닌 텍스트 파일은 또한 다음 있도록 주변의 경우 문을 교환 날짜로 시작하는 것이 가능한 경우

for i, file in enumerate(logFolderContent): 
    if file.startswith(today): # Assuming the files always start with the date 
     eligibleLogs.append(i) 
     # -1 gets last item in list | most recent 
     print("eligibleLogs[i] = ", eligibleLogs[-1]) 
    elif not file.endswith(".txt"): 
     print("Non-text file found and ignored") 
     print(logFolderContent[i]) 

처럼 보이는 것에 대한 루프 대신 잠시 루프를 사용하는 것이 좋습니다 먼저 파일이 텍스트 파일인지 확인합니다. 이

큰 문제가 .txt 날짜와 endswith을 startswith 있도록 아니면 문을 제외/때문에이 라인과 시도이었다 있었다 무엇을 함께하고 문을 추가

print("eligibleLogs[x] = ", eligibleLogs[x]) 

문제는 그없는 모든 파일 때문에 날짜가 일치하면 eligibleLogs의 크기는 x과 일치하지 않으므로 while 루프가 종료되는 순간 목록에 하나의 항목 만 가져올 것임이 거의 보장됩니다.

예를 들어, 첫 번째 일치 항목은 파일 번호 100 일 수 있습니다. 따라서 목록에 항목이 하나 있지만 IndexError가 발생하는 항목을 색인 100에서 가져 오려고합니다. 그러면 루프가 종료되고 예상치 못한 값을 얻게됩니다.

또한 당신은 probalaly 알고 있지만, 그것을 지적.

eligibleLogs.append(i) 

일치하는 파일의 색인을 추가합니다. 어쩌면 당신은 당신의 목록에 발견 된 일치하는 파일 이름이 포함되도록 이것을 선호 할 것입니다. 스티븐 여름 (위의 그의 대답을 참조) 내 코드로 연주 작은 시간

eligibleLogs.append(file) 
0

덕분에, 나는 마침내 원하는대로 작업 스크립트를 가지고있다. 다른 사람들이 파이썬에서 오늘 날짜의 문자열을 검색하려고하는 경우보다 일반적인 목적으로 코드를 다시 작성하여 아래에 넣습니다. 도움을 주신 모든 분들께 감사 드리며이 코드가 다른 사람들에게 도움이되기를 바랍니다.

import os 
import datetime 
# <><><><><><><><><><> Get Today's Date <><><><><><><><><><> 
today = datetime.date.today() 
today = str(today) 
# <><><><><><><><><><> Get Today's Files <><><><><><><><><><> 
folder = "folderlocation" 
folderContent = os.listdir(folder) 
eligibleFiles = [] 
for i, file in enumerate(folderContent): 
    if file.startswith(today): # or -> if today in file 
      eligibleFiles.append(file) 
print(eligibleFiles) 
관련 문제