2017-05-20 3 views
0

Wie kann ich den Namen pdf Datei ersetzen, die mit Python-Anfragen heruntergeladen wird?Umbenennen der heruntergeladenen Datei mit Python-Anfragen

möchte ich es als Manual_name1.pdf nicht retten, wie Elkinson%20Jeffrey.pdf

CSV-Datei wie folgt aussieht:

Manual_name1 https://www.adndrc.org/diymodule/doc_panellist/Elkinson%20Jeffrey.pdf 
Manual_name2 http://www.parliament.bm/uploadedFiles/Content/House_Business/Presentation_of_Papers_and_of_Reports/PCA%20Report%209262014.pdf 
manual_name3 http://www.ohchr.org/Documents/HRBodies/OPCAT/elections2016/HaimoudRamdan.pdf 

Mein aktueller Code:

import os 
import csv 
import requests 

write_path = 'C:\\Users\\hgdht\\Desktop\\Downloader_Automation' # ASSUMING THAT FOLDER EXISTS! 

with open('Links.csv', 'r') as csvfile: 
    spamreader = csv.reader(csvfile) 
    for link in spamreader: 
     if not link: 
      continue 
     print('-'*72) 
     pdf_file = link[0].split('/')[-1] 
     with open(os.path.join(write_path, pdf_file), 'wb') as pdf: 
      try: 
       # Try to request PDF from URL 
       print('TRYING {}...'.format(link[0])) 
       a = requests.get(link[0], stream=True) 
       for block in a.iter_content(512): 
        if not block: 
         break 

        pdf.write(block) 
       print('OK.') 
      except requests.exceptions.RequestException as e: # This 
will catch ONLY Requests exceptions 
       print('REQUESTS ERROR:') 
       print(e) # This should tell you more details about the error 

Antwort

1

Statt

pdf_file = link[0].split('/')[-1] 

die spezifische Spalte aus der CSV-Datei:

pdf_file = link[1] # (assuming the file name is in the second column) 

Wenn der Dateiname in der ersten Spalte ist, sollten Sie

pdf_file = link[0] # (assuming the file name is in the first column) 
# OR 
import time # put this in the beginning of your script 
pdf_file = '{}-{}.pdf'.format(link[0], int(time.time())) 
# file name will look like: "name-1495460691.pdf" 

verwenden, aber dann werden Sie den Verweis auf den Link ändern müssen selbst beim Aufruf mit Anfragen:

a = requests.get(link[1], stream=True) # (assuming the link is in the second column) 
+0

es funktioniert. Aber, es speichert ohne 'Dateityp' und wenn ich 2 oder 3 gleichen Namen in Spalte 1 habe, ersetzt es die Datei immer wieder + Wie kann ich' timestamp' in Dateinamen einfügen, damit es nicht die Datei mit dem gleichen Namen ersetzt. @errata – WarLock

+0

@WarLock Natürlich wird es die Datei mit dem gleichen Namen ersetzen :) Sie müssen sicherstellen, dass alle Namen eindeutig sind. Das ist ein "Feature" jedes einzelnen Betriebssystems ... Ich aktualisierte meine Antwort mit dem Hinzufügen eines Zeitstempels zu jedem Dateinamen. – errata

+0

Für den Fall, dass wir mehrere Links in Spalte B, C, D ebenfalls vor demselben 'manual_name' haben und speichern Sie das mit dem Speichernamen. Wie können wir diesen Link auch lesen? @errata – WarLock

Verwandte Themen