2016-03-19 6 views
1

私はPythonに新しい人です。私が望む結果を達成するのに問題があります。 urldata.txtという名前のテキストファイルを開きます。urldata.txtには、スキーム、サーバー、パスで細分する必要のあるURLが含まれています。Pythonのリスト内の行を分割する?

私は、ファイルからデータを取得しています

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

これが返されます。

http://www.google.com 

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

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

私は

urls.scheme() 
urls.server() 
urls.path() 
を入力したときになるように3枚ごとにこれらのURLを壊したく

入力すると各URLのスキームが返されます

urls.scheme() 

'http','https','https' 

それから、私はこれを行うためのクラスを定義した

urls.path() 

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

を入力したとき、それはパスを返します、私は

urls.server() 

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

最後に入力したときにサーバーを返します。しかし、私は 'scheme()に欠けている1つの位置的な引数があります:' self 'というエラーが表示されます。以下は私のクラスと私が作成したdef部分です。

何か手助けをしていただければ幸いです。

答えて

2

これは既に存在します。それはurlparseと呼ばれています:

from urllib.parse import urlparse 

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

出力:あなたはのpython3でこのクラスのインスタンスを作成せずにクラス定義を(何であるかのURL)を呼び出すしようとすると

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

こんにちは@idjaw。これは業界でこれを行うにはまさに正しい方法ですが、私はこれが宿題の問題であると確信しています。学生が文字列解析を行うようにすることがポイントです。 – AlexLordThorsen

0

その後、このエラーが発生します

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

しかし、あなたは、これは意図したとおりに動作し、そのインスタンスをURLのインスタンスを作成し、使用している場合

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

これは現在のエラーを修正しますが、コードはそのままではありません。このエラーで何が起きているのかを把握しておきます。

クラス定義(またはタイプ)と、クラスのインスタンスとの間の差は、いくつかの興味深いニュアンスが、一般

class Thing: 
    pass 

クラス定義と

thing_instance = Thing() 

で話すを有するのインスタンスでありますクラス。

関連する問題