2017-01-26 5 views
3

Ich suche ein Skript, das alle PDF-Dateien umbenennt, die ich auf einer .CSV-Datei basiert, und sie müssen übereinstimmen.umbenennen von Dateien mit CSV und glob

die CSV-Datei hat Zahlen wie folgt aus:

P20084579 
P10092865 
P10147356 
P20154177 
P10028030 
P10058367 
P10122918 
P10122478 
P20008810 
P10029609 
P20015658 

die PDF-Dateien wie benannt sind:

All_C_2017.1.pdf 
All_C_2017.2.pdf 
All_C_2017.3.pdf 
All_C_2017.4.pdf 
All_C_2017.5.pdf 
All_C_2017.6.pdf 
All_C_2017.7.pdf 
All_C_2017.8.pdf 
All_C_2017.9.pdf 
All_C_2017.10.pdf 
All_C_2017.11.pdf 

etc etc, Die erste Zahl der CSV-Datei (P20084579) geht mit All_C_2017. 1.pdf und so weiter, so dass ich alle diese Nummer umbenennen möchte P20084579.pdf

Ich verstehe, wie ich in CSV-Dateien und Globs

lesen kann
f = open('Test Names.csv', 'rb') 
reader = csv.reader(f) 
for row in reader: 
    print row[0] 

pdf = glob.glob('*.pdf') 
for pdfname in pdf: 
    print pdfname 

und ich hatte gehofft, dass ich etwas mit dem OS.rename() -Modul tun könnte eine Schleife zu haben, die

os.rename(pdfname,row[0]) 

sein würde, aber wenn ich den GLOB die Verzeichnisse auflisten es Listen So wird es die Datei falsch umbenennen, wenn ich versuche, diese Methode zu gehen:

All_C_2017.1.pdf 
    All_C_2017.10.pdf 
    All_C_2017.11.pdf 
    All_C_2017.2.pdf 
    All_C_2017.3.pdf 
    All_C_2017.4.pdf 
    All_C_2017.5.pdf 
    All_C_2017.6.pdf 
    All_C_2017.7.pdf 
    All_C_2017.8.pdf 
    All_C_2017.9.pdf 

Irgendwelche Vorschläge?

Antwort

1

nur zip (Verschachtelung) beiden Ergebnisse (von glob.glob und csv.reader) und die Dateien in der Schleife umbenennen:

with open('Test Names.csv', 'r') as f: 
    for pdfname,row in zip(glob.glob('*.pdf'),csv.reader(f)): 
     os.rename(pdfname,row[0]+".pdf") 

Hinweise:

  • es klug auspacken (new_basename,) direkt zuerst verwenden könnte zu extrahieren (und nur) Zeile aus der CSV-Datei, aber es scheint mehr Spalten zu existieren, also vergiss es.
  • Wenn die Länge der CSV-Datei nicht ausreicht, wird die Umbenennung gestoppt. Es ist besser, sicherzustellen, dass die Größen gleich sind. Die Operation kann schwierig rückgängig gemacht werden.

Safe (r) Version:

with open('Test Names.csv', 'r') as f: 
    pdfs = glob.glob('*.pdf') 
    reader = list(csv.reader(f)) 
    if len(pdfs)!=len(reader): 
     raise Exception("Length mismatch") 

    for pdfname,row in zip(pdfs,reader): 
     os.rename(pdfname,row[0]+".pdf") 
+0

Ich erhalte einen ‚Zu viele Werte entpacken‘ Fehler, aber das ist eine sehr schöne Art und Weise, dies zu tun, ich bin noch neu in Python und nur knapp seinem Ziel wissen über die Zip-Funktion –

+0

behoben, überprüfen Sie meine Bearbeitung. –

+0

Ich war nahe dran, das herauszufinden! Vielen Dank! –

Verwandte Themen