2017-08-03 94 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