2016-06-02 11 views
0

Ich habe den folgenden Code geschrieben, um durch Ordner und ihre Dateien zu durchlaufen und jede Datei in jedem Ordner als Index der Datei im Ordner umzubenennen. ZB die erste Datei in jedem Ordner heißt 1.JPG, die zweite 2.JPG und so weiter. Die Ordnernamen sind Ganzzahlen von 1 bis 82. Ich brauche den Ordnernamen, um den Pfad in os.rename() anzugeben, und plante, ihn aus der dirs Liste zu erhalten, da die Verzeichnisse nicht in Reihenfolge durchläuft.Index Fehler für die Liste in Python

Code:

import os 
import sys 

path='/home/srilatha/Desktop/Research_intern/Data_sets/Final' 
i=0 

for root, dirs, files in os.walk(path): 
    print(dirs) 
    print(dirs[i]) 
    #folder_name=dirs[0] 
    #print(folder_name) 
    j=0 
    for name in sorted(files): 
     j+=1 
     #print('j=') 
     #print(j) 
     print(name) 
     new=str(j) 
     new_name=new+'.JPG' 
     print(new_name) 
     #os.rename(name,new_name) 


    i+=1 

Fehlermeldung:

/usr/bin/python3.4 /home/srilatha/PycharmProjects/Research_Intern/Sort_images_into_folders.py 
['9', '43', '78', '7', '51', '15', '4', '68', '48', '67', '27', '16', '55', '20', '57', '38', '47', '18', '77', '82', '12', '65', '25', '59', '49', '30', '36', '79', '71', '17', '22', '42', '40', '73', '19', '24', '10', '37', '32', '3', '64', '62', '58', '13', '72', '2', '14', '70', '11', '66', '69', '50', '54', '34', '5', '52', '81', '26', '39', '60', '1', '56', '33', '80', '23', '53', '44', '45', '29', '41', '28', '35', '6', '46', '31', '8', '63', '75', '61', '76', '74', '21'] 
9 
[] 
Traceback (most recent call last): 
    File "/home/srilatha/PycharmProjects/Research_Intern/Sort_images_into_folders.py", line 9, in <module> 
    print(dirs[i]) 
IndexError: list index out of range 
+0

Warum 'print (dirs [i])' und 'i + = 1' in der äußeren Schleife? Sollte es nicht noch einen verschachtelten geben? – LogicStuff

+0

Wenn Sie einen Index verfolgen möchten, während Sie über etwas iterieren, verwenden Sie [enumerate] (https://docs.python.org/2/library/functions.html#enumerate). –

+0

@LogicStuff Diese Anweisungen gelten für die Ordnernamen. – RaviTej310

Antwort

1

Ich nehme an, Sie so etwas wie dies wollen?

# Import the os module, for the os.walk function 
import os 

# Set the directory you want to start from 
rootDir = '/Users/heinst' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    print('Found directory: %s' % dirName) 
    i = 0 
    for fname in fileList: 
     print '\t{0} -> {1}'.format(fname, str(i) + os.path.splitext(fname)[1]) 
     i += 1