2012-06-04 12 views
7

Ich versuche, ein Programm zu machen, das ein Verzeichnis öffnet, dann verwenden Sie reguläre Ausdrücke, um die Namen von Powerpoints zu erhalten und dann Dateien lokal zu erstellen und ihren Inhalt zu kopieren. Wenn ich das starte, scheint es zu funktionieren, aber wenn ich versuche, die Dateien zu öffnen, sagen sie immer, dass die Version falsch ist.Python urllib Download Inhalt eines Online-Verzeichnisses

from urllib.request import urlopen 
import re 

urlpath = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/') 
string = urlpath.read().decode('utf-8') 

pattern = re.compile('ch[0-9]*.ppt') #the pattern actually creates duplicates in the list 

filelist = pattern.findall(string) 
print(filelist) 

for filename in filelist: 
    remotefile = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/' + filename) 
    localfile = open(filename,'wb') 
    localfile.write(remotefile.read()) 
    localfile.close() 
    remotefile.close() 
+2

Sie sollten ** nie ** Parsing HTML mit RegEx finden http://stackoverflow.com/a/1732454/851737. Verwenden Sie eine HTML-Parsing-Bibliothek wie lxml oder BeautifulSoup. – schlamar

+0

BeautifulSoup ist es. Vielen Dank für Ihre Empfehlung. – davelupt

Antwort

8

Dieser Code funktionierte für mich. Ich habe es nur ein wenig modifiziert, weil du jede PPT-Datei duplizierst.

from urllib2 import urlopen 
import re 

urlpath =urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/') 
string = urlpath.read().decode('utf-8') 

pattern = re.compile('ch[0-9]*.ppt"') #the pattern actually creates duplicates in the list 

filelist = pattern.findall(string) 
print(filelist) 

for filename in filelist: 
    filename=filename[:-1] 
    remotefile = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/' + filename) 
    localfile = open(filename,'wb') 
    localfile.write(remotefile.read()) 
    localfile.close() 
    remotefile.close() 
+0

Danke, du bist ein Champion. – davelupt

+0

Siehe meinen Kommentar [oben] (http://stackoverflow.com/questions/10875215/python-urllib-downloading-contents-of-online-directory#comment14174956_10875215) für Downvote Grund. – schlamar

+0

das ist erstaunlich, danke – Anuj