我昨天问了一个类似的问题,但是我提供了一些代码,基本上我的问题与我想要的不同。所以我会再试一次。
我正在重写一个抓取网站以查找几百个文本文件的python脚本,我对该文件第二行之外的任何文本文件内容都不感兴趣。以前我会下载所有文件然后循环遍历它们以提取第二行。我现在想打开每个文件,因为我的脚本发现它,抓住第二行,然后关闭它而不下载到我的硬盘然后打开它。
所以基本上有一种方法可以打开www.example.com/123456.txt上的文件,然后从该文件中取出第二行,将其复制到数组或其他内容,而无需下载然后打开它。 / p>
答案 0 :(得分:2)
好吧,您可以使用urllib2.urlopen()
将文件内容放入内存,解压缩第二行,然后立即从内存中丢弃文件,如果您愿意,不要碰到磁盘。
你 必须通过互联网下载内容。
答案 1 :(得分:1)
您可以尝试类似urllib2.urlopen('url').read().splitlines()[1]
的内容,但我想这会将整个文件下载到内存
答案 2 :(得分:1)
您无法检索第N行(或执行行搜索),但如果Web服务器支持Range
标头,则可以检索文件的前N个字节(字节搜索)。
如果你知道一条线的最大长度,你可以这样做:
>>> import urllib2
>>> maxlinelength = 127 # nb: in terms of bytes
>>> myHeaders = {'Range':'bytes=0-'+str(maxlinelength)} # from byte 0 to maxlinelength
>>> req = urllib2.Request('http://www.constitution.org/gr/pericles_funeral_oration.txt', headers=myHeaders)
>>> partial = urllib2.urlopen(req)
>>> partial.readline() # first line discarded
>>> yourvar = partial.readline()
>>> yourvar # this is the second line:
'from Thucydides (c.460/455-399 BCE), \r\r\n'