2017-08-17 17 views
0

使用硒,我能夠自動下載zip文件並將其保存到指定的目錄。然而,當我嘗試解壓文件時,我遇到了一個難以找到最近下載的文件的障礙。如果有幫助,這是代碼相關的下載和解壓過程塊:Python - 找不到下載的文件解壓縮

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

具體來說,這是我的錯誤:

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' 

我試圖刪除它,並把另一個代碼故障排除文件在目錄中,我能夠找到隨機文件,但不能找到最近下載的文件。誰能告訴我這裏發生了什麼?

+0

首先,當你使用'lists'時,不要使用'list'作爲你的變量名稱。這可能會導致命名空間問題。其次,'os.listdir'不會列出完整路徑。所以你需要在'os.listdir(path)]'中用'file_list = [os.path.join(path,f)'替換'list = os.listdir(path)''。 – Abdou

+0

另外,用'[-1]'替換'[len(time_sorted_list)-1]'。 –

+0

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

回答

1

首先,不要使用list作爲變量名稱。這隱藏了list構造函數,使其不能在程序中的其他位置使用。其次,os.listdir不會返回該目錄中文件的完整路徑。如果你想的完整路徑,有兩件事情可以做:

您可以使用os.path.join

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 

您還可以使用glob函數從glob模塊:

​​

要麼應該工作。

+0

我該如何將這兩種解決方案中的任何一種解壓縮文件? – user2105555

+0

@ user2105555請參閱編輯。另外,您是否想要提取zip文件的內容,或者是否希望從整個zip文件中讀取特定文件的內容? – Abdou

+0

我希望在壓縮文件中找到特定文件,將其保存爲csv,並將文件重命名爲硒過程中選擇的組合。例如,如果我選擇玉米作物,供水灌溉,輸入水平高,巴西爲國家,那麼文件名應該是Crops_Corn-WaterSupply_Irrigation-InputLevel_High-Country_Brazil或類似的東西。 – user2105555