2016-03-19 12 views
1

Python'un yeni ish'iyim ve istediğim sonucu elde etmede sorun yaşıyorum. Şema, sunucu ve yol tarafından ayrıştırılması gereken URL'leri içeren urldata.txt adlı bir metin dosyası açıyorum.Listede Python'da Bölme Çizgileri mi?

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

bu döndürür::

ben dosyasından verileri aldıktan

http://www.google.com 

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

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

Ben 3 parçaya bu URL'leri kırmak istediğiniz her ı

urls.scheme() 
urls.server() 
urls.path() 
girdiklerinde böylece

numaralı telefon numarasını girdiğimde her URL'nin şemasını bana döndürür
urls.scheme() 

'http','https','https' 

Sonra bunu yapmak için bir sınıf tanımladık

urls.path() 

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

girdiğinizde o yolu dönecektir, ben

urls.server() 

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

Son olarak girdiğinizde sunucu döndürür; ancak, 'şema()' nın eksik 1 konumsal argümanını gerektirdiğini söyleyen bir hata alıyorum: 'kendim' Aşağıda, benim sınıfım ve yarattığım def parçaları var.

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] 

Her hangi bir yardım büyük beğeni topluyor!

cevap

2

Bu zaten var. Bu urlparse denir:

from urllib.parse import urlparse 

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

Çıktı: Eğer Python3 bu sınıfın bir örneğini oluşturmadan sınıf tanımını (ne URL'ler) aramayı denerse

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

Hello @idjaw. Bu, endüstride bunu yapmanın tam olarak doğru yolu olsa da, bu ev ödevi probleminden ve öğrencinin kendilerini ayrıştıran dizgeden geçmesini sağlamaktan oldukça eminim. – AlexLordThorsen

0

o zaman bu hatayı alıyorum

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

Ama bu gerektiği gibi çalışıyorsa bu örneği uRL'lerin bir örneğini oluşturmak ve sonra kullanırsanız

>>> 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' 

Bunun geçerli hatayı düzelttiğini unutmayın, ancak kodunuz olduğu gibi doğru değil. Bu hata ile neler olduğunu anlamaya sizi bırakacağım.

bir sınıf tanımı (veya tip) ve sınıfının bir örneği arasında fark bazı ilginç nüans ama genellikle

class Thing: 
    pass 

bir sınıf tanımı ve

thing_instance = Thing() 

olan konuşma sahip bir örneğidir sınıf.