2017-08-03 102 views
-3

我需要幫助制定在我的腳本新的代碼讀取通過文件報廢,如果有文件名的任何重複(不是文件類型),然後從目錄中刪除重複的文件名。提前致謝!這裏是我當前的代碼:如何擺脫使用python

from bs4 import BeautifulSoup 
import urllib.request 
import os 

url = urllib.request.urlopen("https://www.fhfa.gov/DataTools/Downloads/Pages/House-Price-Index-Datasets.aspx#mpo") 

soup = BeautifulSoup(url, from_encoding=url.info().get_param('charset')) 

FHFA = os.chdir('C:/US_Census/Directory') 

for link in soup.find_all('a', href=True): 
    href = link.get('href') 
    if not any(href.endswith(x) for x in ['.csv', '.xml', '.xls', '.xlsx', '.sql', '.txt', '.json']): 
     continue 

    filename = href.split('/')[-1] 
    url = urllib.request.urlretrieve('https://www.fhfa.gov/' + href, filename) 
    print(filename) 

print(' ') 
print("All files successfully downloaded.") 
+1

您可以包括你現在做了什麼輸出以前的文件的set,和你想要的輸出。 –

+0

我很難理解你想要做什麼以及你有什麼問題。輸入和預期輸出的例子會有所幫助。 – MrJLP

回答

1

你的代碼檢索文件名如:

HPI_master.csv 
HPI_master.xml 
HPI_master.sql 
... 

可以理解的,你只想要第一個,放棄休息。

您可以添加set保持看到文件名的軌跡:

seen = set() 
for link in soup.find_all('a', href=True): 
    href = link.get('href') 
    if not any(href.endswith(x) for x in ['.csv', '.xml', '.xls', '.xlsx', '.sql', '.txt', '.json']): 
     continue 

    file = href.split('/')[-1] 
    filename = file.rsplit('.', 1)[0] 
    if filename not in seen: # only retrieve file if it has not been seen before 
     seen.add(filename) # add the file to the set 
     url = urllib.request.urlretrieve('https://www.fhfa.gov/' + href, file) 
+0

@bhammer對不起。現在就試試。它應該是'看到= set()' –

+0

@bhammer如何可以'看到'是一個元組?這是一組...:/請告訴我你的代碼。 –

+0

注意'filename'包含擴展,因此它會同時下載'「HPI_master.csv」'和'「HPI_master.xls」'如果他們兩人的存在 –

0

添加您已經看到

seen = set() 
for link in soup.find_all('a', href=True): 
    href = link.get('href') 
    splitted = href.replace('/','.').split('.') 
    if len(splitted)<2: 
     continue 
    filename, fileext = splitted[-2:] 
    if href.find('.')<0 or not (fileext.lower() in ['csv', 'xml', 'xls', 'xlsx', 'sql', 'txt', 'json']): 
     continue 
    if filename in seen: 
     continue 
    seen.add(filename) 
    url = urllib.request.urlretrieve('https://www.fhfa.gov/' + href, filename+'.'+fileext) 
    print(filename) 
+0

我不斷收到錯誤,「ValueError異常:沒有足夠的數值解壓縮(預計2,拿到1)」。它與該行有關:「filename,fileext = href.replace('/','。')。split('。')[ - 2:]」。你知道這是爲什麼發生嗎? – bhammer

+0

是的,這是因爲該腳本遇到鏈接,不會導致文件,修復它 –

+0

真棒它正在工作,除了它現在擺脫文件名的結尾,所以而不是「HPI_master.csv」它是「HPI_master」。任何方式,我們可以保持文件格式? – bhammer