2016-07-18 18 views
0

UPDATE: Wenn Sie versuchen, eine Datei für das heutige Datum in Python suchen, habe ich meinen endgültigen Code in den Antworten Abschnitt unten gepostet.Suchen Sie eine Datei für das heutige Datum in Python

Ich habe einen Ordner mit Protokollen, die von einem Programm erstellt wurden. Der Protokolltitel enthält den Namen des Benutzers und das Datum, an dem das Protokoll erstellt wurde. Ich versuche, ein Python-Skript zu schreiben, das die Logs mit dem heutigen Datum öffnet und sie liest. Ich habe datetime verwendet, um das heutige Datum zu erhalten, und wenn heute in logFolderContent [x] nach dem Datum suchen. Ich konnte eine kleinere Version dieses Skripts arbeiten (suche drei Strings), aber als ich es neu schreiben wollte, um den Ordner zu suchen, in dem ich Probleme hatte.

Unten ist mein Skript. Dank der Hilfe von @Steven Summers ist mein Code etwas ordentlicher. Ich habe den alten Code durch den neuen Code ersetzt. Ich habe inzwischen festgestellt, dass das Skript abstürzt, wenn es versucht, mit den heutigen Dateien zu interagieren. Hier

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]) 

ist die Ausgabe:

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 

Als ich die Leitung logFolderContent.reverse remove(), das Skript druckt alle Dateinamen (das heißt, sie sind die Erfüllung der Anforderung unten) und stürzt ab, wenn es Dateinamen mit dem heutigen Datum erreicht.

+0

Was meinst du mit „Als ich die Gruppe logFolderContent reverse“ gibt es wirklich 584 Dateien im Ordner? sind 15 von ihnen ohne .txt? – pwnsauce

+0

@pwnsauce. list.reverse(). Anstelle von [file1, file2, file3] wäre es [file3, file2, file1] – Justlieb

+0

@pwnsauce Ich lege die gedruckte Ausgabe unter den Code. Vielleicht wird das helfen – Justlieb

Antwort

2

Ich schlage vor, mit einer for-Schleife statt einer while-Schleife, die wie

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]) 

aussehen würde, wenn es möglich ist, eine nicht-Textdatei mit Datum zu beginnen, um dann die if-Anweisungen tauschen um, so dass es überprüft zuerst, dass die Datei eine Textdatei ist. Oder ein und Erklärung hinzufügen, so starts es Datum und endswith .txt

Ein großes Problem mit dem, was hatten Sie wegen dieser Linie war und eine try/except-Anweisung

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

Das Problem ist, dass da nicht jede Datei stimmt mit dem Datum überein, die Größe von eligibleLogs stimmt nicht mit x überein, so dass es fast garantiert ist, dass Sie maximal einen Eintrag in der Liste erhalten, sobald die while-Schleife beendet wird.

Zum Beispiel könnte Ihre erste Übereinstimmung die Dateinummer 100 sein, daher enthält Ihre Liste 1 Element, aber Sie versuchen dann, das Element bei Index 100 zu erhalten, was einen Indexfehler verursacht. Ihre Schleife wird dann beendet und Sie erhalten die Werte, die Sie nicht erwartet haben.

Darüber hinaus sind Sie sich bewusst, aber nur darauf hingewiesen.

Fügt den Index der Datei an, der er entspricht. Vielleicht würden Sie dies bevorzugen, so dass Ihre Liste die Dateinamen der gefundenen Übereinstimmungen enthält.

eligibleLogs.append(file) 
0

Dank Steven Summers (siehe seine Antwort oben) und eine wenig Zeit mit meinem Code zu spielen, habe ich endlich das Skript wie gewünscht funktioniert. Wenn jemand versucht, eine Zeichenfolge für das heutige Datum in Python zu suchen, habe ich meinen Code neu geschrieben, um einen allgemeineren Zweck zu erfüllen und ihn unten zu setzen. Danke an alle, die geholfen haben und hoffentlich wird dieser Code für andere hilfreich sein.

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) 
Verwandte Themen