2017-08-17 5 views
0

Mit Selen konnte ich den Download einer Zip-Datei automatisieren und in ein bestimmtes Verzeichnis speichern. Wenn ich jedoch versuche, die Datei zu entpacken, stoße ich auf einen Fehler, bei dem ich die zuletzt heruntergeladene Datei nicht finden kann. Wenn es hilft, ist dies der Code-Block zu dem Herunterladen und Entpacken Prozess verwendet ist:Python - Kann die heruntergeladene Datei zum Entpacken nicht finden

# Click on Map Link 
driver.find_element_by_css_selector("input.linksubmit[value=\"▸ Map\"]").click() 
# Download Data 
driver.find_element_by_xpath('//*[@id="buttons"]/a[4]/img').click() 

# Locate recently downloaded file 
path = 'C:/.../Download' 
list = os.listdir(path) 
time_sorted_list = sorted(list, key=os.path.getmtime) 
file_name = time_sorted_list[len(time_sorted_list)-1] 

Insbesondere ist dies mein Fehler:

Traceback (most recent call last): 
    File "C:\Users\...\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-89-3f1d00dac284>", line 3, in <module> 
    time_sorted_list = sorted(list, key=os.path.getmtime) 
    File "C:\Users\...\AppData\Local\Continuum\Anaconda3\lib\genericpath.py", line 55, in getmtime 
    return os.stat(filename).st_mtime 
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'grid-m1b566d31a87cba1379e113bb93fdb61d5be5b128.zip' 

ich den Code versucht, die Fehlersuche durch sie zu löschen und eine andere Platzierung Datei im Verzeichnis, und ich konnte die zufällige Datei finden, aber nicht die kürzlich heruntergeladene Datei. Kann mir jemand sagen, was hier vor sich geht?

+0

Als erstes sollten Sie 'list' nicht für Ihre Variablennamen verwenden, wenn Sie bereits mit' lists' arbeiten. Das wird wahrscheinlich Namespace-Probleme verursachen. Zweitens, "os.listdir" listet nicht den vollständigen Pfad auf. Daher müssen Sie 'list = os.listdir (Pfad)' durch 'file_list = [os.path.join (Pfad, f) für f in os.listdir (Pfad)]' ersetzen. – Abdou

+0

Ersetzen Sie auch '[len (time_sorted_list) -1]' mit nur '[-1]'. –

+0

Dupe: https://stackoverflow.com/q/29159824/2988730 –

Antwort

1

Zunächst nicht list für einen Variablennamen verwenden. Das verbirgt den list-Konstruktor davor, verfügbar zu sein, woanders in Ihrem Programm zu verwenden. Zweitens gibt os.listdir nicht den vollständigen Pfad der Dateien in diesem Verzeichnis zurück. Wenn Sie den vollständigen Pfad wollen, gibt es zwei Dinge, die Sie tun können:

Sie os.path.join verwenden können:

from glob import glob 
import zipfile 


path = 'C:/.../Download' 
file_list = glob(path+"/*") 
time_sorted_list = sorted(file_list, key=os.path.getmtime) 
file_name = time_sorted_list[-1] 

myzip = zipfile.ZipFile(file_name) 
for contained_file in myzip.namelist(): 
    if all(n in contained_file.lower() for n in ('corn', 'irrigation', 'high', 'brazil')): 
     with myzip.open(contained_file) as f: 
      # save data in a CSV file 

:

import zipfile 


path = 'C:/.../Download' 
file_list = [os.path.join(path, f) for f in os.listdir(path)] 
time_sorted_list = sorted(file_list, key=os.path.getmtime) 
file_name = time_sorted_list[-1] 
myzip = zipfile.ZipFile(file_name) 
for contained_file in myzip.namelist(): 
    if all(n in contained_file.lower() for n in ('corn', 'irrigation', 'high', 'brazil')): 
     with myzip.open(contained_file) as f: 
      # save data to a CSV file 

Sie auch die glob Funktion aus dem glob Modul verwenden können, Entweder sollte funktionieren.

+0

Wie würde ich eine der beiden Lösungen zum Entpacken einer Datei integrieren? – user2105555

+0

@ user2105555 sehen Sie die Änderungen. Möchten Sie auch den Inhalt der ZIP-Datei extrahieren oder möchten Sie den Inhalt einer bestimmten Datei aus der gesamten ZIP-Datei lesen? – Abdou

+0

Ich möchte eine bestimmte Datei in der ZIP-Datei suchen, speichern Sie es als CSV, und benennen Sie die Datei als eine Kombination der Selektionen aus der Selen-Prozedur. Wenn ich beispielsweise Mais für Feldfrüchte, Bewässerung für Wasserversorgung, Hoch für Eingangspegel, Brasilien für Land auswähle, sollte der Dateiname Crops_Corn-WaterSupply_Irrigation-InputLevel_High-Country_Brazil oder etwas Ähnliches lauten. – user2105555

Verwandte Themen