2016-03-19 14 views
1

Ich bin neu bei Python und habe Probleme, ein Ergebnis zu erzielen, das ich möchte. Ich öffne eine Textdatei namens urldata.txt, die URLs enthält, die ich nach Schema, Server und Pfad aufschlüsseln muss.Zeilen in Python in einer Liste aufteilen?

Ich habe die Daten aus der Datei abgerufen:

urls = open("urldata.txt").read() 
print(urls) 

dies zurück:

http://www.google.com 

https://twitter.com/search?q=%23ASUcis355 

https://github.com/asu-cis-355/course-info 

ich je diese URLs in 3 Stücke brechen wollen, so dass, wenn ich

urls.scheme() 
urls.server() 
urls.path() 
eingeben

Es wird mir das Schema jeder URL zurückgeben, wenn ich

eingeben
urls.scheme() 

'http','https','https' 

Dann wird es den Server zurück, wenn ich

urls.server() 

'google.com' 
'twitter.com' 
'github.com' 

Schließlich betreten, wird es den Weg zurück, wenn ich

urls.path() 

'/' 
'/search?q=%23ASUcis355' 
'/asu-cis-355/course-info' 

gebe ich eine Klasse definiert haben, dies zu tun; Ich erhalte jedoch einen Fehler, der besagt, dass "schedule() 1 benötigtes Positionsargument fehlt: 'self'. Unten sind meine Klasse und die def-Teile, die ich erstellt habe.

class urls: 
    def __init__(self,url): 
     self.urls=urls 
    def scheme(self): 
     return urls.split("://")[0] 
    def server(self): 
     return urls.split("/")[2] 
    def path(self): 
     return urls.split(".com/")[1] 

Jede Hilfe wird sehr geschätzt!

Antwort

2

Dies existiert bereits. Es urlparse genannt:

from urllib.parse import urlparse 

d = urlparse('https://twitter.com/search?q=%23ASUcis355') 
print(d) 

Ausgang:

ParseResult(scheme='https', netloc='twitter.com', path='/search', params='', query='q=%23ASUcis355', fragment='') 
+0

Hallo @idjaw. Während dies völlig der richtige Weg ist, dies in der Industrie zu tun, bin ich ziemlich sicher, dass dies ein Hausaufgabenproblem ist und der Punkt ist, dass der Schüler die Strings selbst analysieren muss. – AlexLordThorsen

0

Wenn Sie eine Klassendefinition zu nennen versuchen (was Urls' ist), ohne dass eine Instanz dieser Klasse in Python3 Erstellen dann erhalten Sie diesen Fehler

>>> urls.scheme() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: scheme() missing 1 required positional argument: 'self' 
>>> 

Aber wenn Sie eine Instanz von URLs erstellen und verwenden Sie dann diese Instanz diese wie vorgesehen funktioniert

>>> url_instance = urls("http://www.google.com") 
>>> url_instance.scheme() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 5, in scheme 
AttributeError: type object 'urls' has no attribute 'split' 

Beachten Sie, dass dies Ihren aktuellen Fehler behebt, aber Ihr Code nicht korrekt ist. Ich werde Sie verlassen, um herauszufinden, was mit diesem Fehler passiert.

Der Unterschied zwischen einer Klassendefinition (oder Typ) und eine Instanz der Klasse hat einige interessante Nuance aber in der Regel

sprechen
class Thing: 
    pass 

ist eine Klassendefinition und

thing_instance = Thing() 

ist eine Instanz die Klasse.

Verwandte Themen