2016-04-02 9 views
0

Ich bin ein Anfänger, wenn es um Informatik geht. In meiner Klasse arbeiten wir an einem Projekt, das sich mit Erdbebendaten und Textdateien, speziell von dieser Seite:Python: Urllib Probleme

http://www.choongsoo.info/teach/mcs177-sp12/projects/earthquake/earthquakeData-02-23-2012.txt

Hier die Informationen aus dem Projekt sind.

Schreiben Sie den Vertrag, DocString und die Implementierung für eine Prozedur parseEarthquakeData, die zwei Daten im Format YYYY/MM/DD verwendet, auf die Erdbebendaten von der obigen USGS-URL zugreift und eine Liste mit vier Zahlen zurückgibt, die den Breitengrad darstellen. Länge, Größe und Tiefe. Die äußere Liste sollte eine dieser vier Listen für jedes Erdbeben zwischen den angegebenen Daten enthalten.

HINWEIS: Wenn Sie das Lehrbuch der ersten Ausgabe haben, hat es zwei Fehler, die in der zweiten Ausgabe korrigiert wurden. Erstens hat das erste Lehrbuch einen Tippfehler: Verwenden Sie urllib.request anstelle von urllib. Zweitens, denken Sie daran, dass Sie alles, was Sie aus dem Internet lesen, als ASCII dekodieren müssen.

decodedString = myString.decode ('ascii')

Was ich habe, so weit ist: zum Beispiel, wenn Sie eine Zeichenfolge in eine Variable myString lesen, können Sie es durch dekodieren

import urllib 
# 
def parseEarthquakeData(date1,date2): 
    quakeFile=urllib.urlopen('http://www.choongsoo.info/teach/mcs177-sp12/projects/earthquake/earthquakeData-02-23-2012.txt') 
    latitude=[] 
    longitude=[] 
    magnitude=[] 
    depth=[] 
    for i in quakeFile: 
     i=i.decode('ascii') 
     splitData=i.split(',') 
     if betweenDates(splitData[0],date1,date2): 
      latitude.append(splitData[2]) 
      longitude.append(splitData[3]) 
      magnitude.append(splitData[4]) 
      depth.append(splitData[5]) 
    totalList=[] 
    totalList.append(latitude) 
    totalList.append(longitutde) 
    totalList.append(magnitude) 
    totalList.append(depth) 
    return totalList 

und wenn ich die Funktion in dem Python-Shell eingeben bekomme ich diese:

parseEarthquakeData("2012/02/23","2012/02/22") 

Traceback (most recent call last): 
    File "<pyshell#68>", line 1, in <module> 
    parseEarthquakeData("2012/02/23","2012/02/22") 
    File "/Users/BaronRitic/Desktop/Python/Project 6/betweenDates.py", line 17, in parseEarthquakeData 
    quakeFile=urllib.urlopen('http://www.choongsoo.info/teach/mcs177-sp12/projects/earthquake/earthquakeData-02-23-2012.txt') 
AttributeError: module 'urllib' has no attribute 'urlopen' 

ich habe Python Version 3.5.1 ich bin noch relativ neu auf alle Bedingungen und Vorarb ses. Ich bin nicht ganz sicher, wie man das Urllib-Modul benutzt. Jede Hilfe wird sehr geschätzt!

PS der Vertrag ist leer, weil ich normalerweise das letzte mache.

Antwort

0

Es sieht so aus, als hätten Sie sich einige Python 2.7-Beispiele angeschaut, bevor Sie Ihren Code geschrieben haben?

In Python 3 befindet sich die urlopen-Funktion nicht innerhalb von urllib, sie befindet sich in . So ist die erste Zeile sollte in Ihrem Skript sein:

from urllib.request import urlopen 

Und dann einfach urlopen unten.

Wenn Ihre Klasse jedoch Python 2 als Codebeispiele verwendet, sollten Sie wahrscheinlich Python 2.7 installieren (aber sagen Sie Ihrem Lehrer, dass Sie zu Python 3 wechseln sollten!).

+0

Ok! Eine Sache, die ich falsch gemacht habe, war, dass ich die Notiz falsch gelesen habe und gesagt habe, urllib.request anstelle von urllib zu verwenden. in meinem Kopf blätterte ich das herum. Mein Lehrer verwendet die neueste Version. Obwohl er selbst nicht die neueste Version verwendet ... auch eine andere Frage wäre, wie kann ich die ASCII decodieren? Python sagt mir immer wieder, dass die io_TextIObase diese Funktion nicht hat. Ich habe es tatsächlich geschafft, meine Funktion dazu zu bringen, mir das zu geben, was ich für die korrekte Ausgabe halte, aber jetzt frage ich mich, wofür der Decodierungsteil dieses Projekts gedacht ist. Kann mir das jemand erklären? Und ich danke dir Codeape !! –