在列表中拆分Python中的行?

时间:2016-03-19 05:41:04

标签: python function class

我是Python的新手,我无法实现我想要的结果。我正在打开一个名为urldata.txt的文本文件,其中包含我需要按方案,服务器和路径细分的URL。

我从文件中检索了数据:

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个,以便在我输入

urls.scheme()

'http','https','https'

当我输入

时,它将返回每个URL的方案
urls.server()

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

然后当我输入

时它将返回服务器
urls.path() 

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

最后,当我输入

时,它将返回路径
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]

我已经定义了一个类来执行此操作;但是,我收到一个错误,说'scheme()缺少1个必需的位置参数:'self'下面是我的类,它是我创建的def部分。

{{1}}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

这已经存在。它被称为urlparse

from urllib.parse import urlparse

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

输出:

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

答案 1 :(得分:0)

如果你试图在Python3中没有创建这个类的实例来调用类定义(那些urls')那么你就会得到这个错误

>>> 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()

是该类的实例。