【问题标题】:i am trying to read a txt based website and it is only reading odd lines我正在尝试阅读基于 txt 的网站,但它只阅读奇数行
【发布时间】:2016-06-04 04:29:46
【问题描述】:
import urllib.request
mypage=urllib.request.urlopen("http://cryptocode.net/cs8/cities.txt")
def makelist(URL):
    list1=[]
    for line in mypage:
        s=mypage.readline()

我想把网站上的数据变成一个列表。当我输入for line in mypage: print(line) 时,它会全部打印出来,但是当我尝试读取它时,它只会读取每隔一行。

【问题讨论】:

  • 您是否错过了实际代码中的结束引号或只是在这里。我相信它就在这里。然后,您不会将 s 放入 list1。如果是公开的,您能否也提供网络链接?
  • 不抱歉,只是一个错字。我输入 print ,它只打印奇数行。一旦我看到它工作正常,我会将它放入列表中
  • 这很奇怪..我的盒子说,没有名为 urllib 的模块
  • 是的,我在网上到处都说使用 urllib2,但我说不存在
  • 我真的建议使用 requests 库。我会去寻找我的 urllib 不工作的原因。 docs.python-requests.org/en/master

标签: python list readline


【解决方案1】:

这里的问题是,当您使用 for 循环遍历 mypage 时,您实际上是在阅读它两次。假设您有一个包含此文本的网页:

Hello
you
Hello
will
Hello
only
Hello
read
Hello
this

当您阅读时:

for line in mypage:
    s=mypage.readline()

s 将包含you will only read this。这是因为,当您使用 for line in mypage 进行迭代时,就像是在说 line = mypage.readline()(因此,您只会得到偶数行)。因此,更正后的代码应该是:

for line in mypage:
    s = line

编辑

您必须将所有数据存储到使用元组在 for 循环之外声明的 list(我强烈建议您使用不同的变量名,因为 list 是一种类型)。然后可以使用.sort()sorted()的方法按字母顺序排序:

        # ...
        finallist.append(cities)
        finallist.append(temp)
        finallist.append(populationAmount)
        # Add this instead of the print statement
        list.append((finallist[0], finallist[1], finallist[2]))
    for s in sorted(list):
        print(s[0] + ",", s[1] + " ", s[2] + " ")

【讨论】:

  • @frank 如果仅此而已,请选择一个答案。
  • 抱歉打扰了,我只是很困惑,我会在打印之前使用决赛名单吗?
  • @frank 查看我最近的编辑。我将sorted() 的使用放入您的上下文中。
猜你喜欢
  • 2023-03-29
  • 2021-06-05
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2022-01-20
  • 2012-03-10
相关资源
最近更新 更多