Как переименовать Scraped файлы из существующего списка с Python - PullRequest
3 голосов
/ 29 марта 2019

Я удаляю файлы с веб-сайта и хочу переименовать эти файлы на основе существующих имен каталогов на моем компьютере (или, если проще, списка, содержащего эти имена каталогов).Это необходимо для соблюдения согласованного соглашения об именах.

Например, у меня уже есть каталоги с именем:

Barone Capital Management, Gabagool Alternative Investments, Aprile Asset Management, Webistics Investments

Извлеченные данные состоят из некоторых точных совпадений, некоторые "нечеткие совпадения и некоторые новые значения:

Barone, Gabagool LLC, Aprile Asset Management, New Name, Webistics Investments

Я хочу, чтобы очищенные файлы принимали соглашение об именах существующих каталогов.Например, Barone станет Barone Capital Management, а Gabagool LLC будет переименовано Gabagool Alternative Investments.

Так каков наилучший способ сделать это?Я посмотрел на fuzzywuzzy и некоторые другие библиотеки, но не уверен, что это правильный путь.

Это мой существующий код, который просто называет файл на основе привязки:

import praw
import requests
from bs4 import BeautifulSoup
import urllib.request

url = 'https://old.reddit.com/r/test/comments/b71ug1/testpostr23432432/'
headers = {'User-Agent': 'Mozilla/5.0'}
page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find_all('table')[0]

#letter_urls = []
for anchor in table.findAll('a'):
    try:
        if not anchor:
            continue
        fund_name = anchor.text
        letter_link = anchor['href']
        urllib.request.urlretrieve(letter_link, '2018 Q4 ' + fund_name + '.pdf')
    except:
        pass

Обратите внимание, что список каталогов уже создан, и выглядит примерно так:

 - /Users/user/Dropbox/Letters/Barone Capital Management
 - /Users/user/Dropbox/Letters/Aprile Asset Management
 - /Users/user/Dropbox/Letters/Webistics Investments
 - /Users/user/Dropbox/Letters/Gabagool Alternative Investments
 - /Users/user/Dropbox/Letters/Ro Capital
 - /Users/user/Dropbox/Letters/Vitoon Capital

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Как рассматривается в Python: найти ближайшую строку (из списка) к другой строке

вы можете использовать difflib.get_close_matches (https://docs.python.org/3/library/difflib.html#difflib.get_close_matches), чтобы найти наиболее похожую строку в списке. В вашем списке будут папки ваших абсолютных путей, которые у вас уже есть:

import difflib
best_options = get_close_matches(fund_name, candidates, n=1)

if best_options:
    directory = best_options[0]
else:
    directory = 'New Name'
0 голосов
/ 03 апреля 2019

Работает:

best_options = get_close_matches(fund_name, candidates, n=1, cutoff=.5)

try:
     if best_options:
       fund_name = (downloads_folder + period + " " + fund_name + ".pdf")
       os.rename(fund_name, downloads_folder + period + " " + best_options[0] + ".pdf" )
    except:
        pass
...