【问题标题】:using for loop variable in function python在函数python中使用for循环变量
【发布时间】:2012-12-17 19:16:36
【问题描述】:

我正在构建一个执行以下操作的应用程序:

  • 从 .txt 文件中获取主机并将它们放入列表中
  • 下载每个网站的标题并将它们放入另一个列表中
  • 将包含特定单词的行打印到包含时间戳、特定行和属于该时间戳的 url 的日志文件中。

实际上一切正常,但我似乎无法将正在检查的 url 传递给其他函数以便可以使用它。

此链接中的代码:http://pastebin.com/630FrspN

实际上将打印日志文件中的每个条目相同的 url...如果我将日志文件(websiteheaders,url)放入 for 循环中,它会起作用,但它会在日志文件中打印一个条目,次数与我一样多我的主机文件中的网址。

我需要以某种方式将在 for 循环中检查的“url”传递给 logfile 函数...

可能是一个简单的答案,但我似乎找不到它。提前致谢。

编辑:我认为下面的代码是最相关的。

def headerophalen(websites):

    for url in websites:
        try:
            response = urllib2.urlopen(url)
            headers = str(response.info())
            websiteheaders.extend(headers.splitlines())
        except urllib2.HTTPError, error:
            print "Error opening URL: ", url, "HTTP Errorcode: ", error.code
            continue

    logfile(websiteheaders, url)

【问题讨论】:

  • 如果可以的话,请将代码的相关部分粘贴到问题中。

标签: python variables for-loop


【解决方案1】:

您需要在for 循环内记录数据。您可以按照 ballsdotballs 在他的回答中建议的那样构建一个 dict,但似乎每次迭代都写入您的日志更有意义,除非您需要将处理后的信息用于日志以外的其他内容。

def headerophalen(websites):

    for url in websites:
        try:
            response = urllib2.urlopen(url)
        except urllib2.HTTPError, error:
            print "Error opening URL: ", url, "HTTP Errorcode: ", error.code
        else:
            logfile(url, str(response.info()).splitlines())

【讨论】:

  • 这实际上什么都不做,哈哈,它现在什么也不做,因为我不想在打开 URL 失败时在日志文件中记录一些东西。在 for 循环(下载标题并将它们放入列表中)之后,我想启动一个名为 logfile 的新函数,它将对标题执行其他操作
  • 我再次查看了您的问题,注意到了这一点,并相应地调整了我的答案。不过,您的逻辑中有一个更深层次的缺陷。 logfiles 对单个 URL 做任何事情都是没有意义的,而是对 websiteheaders 的完整列表做任何事情。你到底想在这里做什么?你也永远不会初始化websiteheaders,所以当你尝试extend时它会引发一个异常。
  • 我在扩展 websiteheaders 时没有收到错误,因为它正在我的代码顶部进行初始化。在日志文件函数中,我想打印检查过的 URL,将时间戳和标题中的“服务器”行打印到日志文件中。
【解决方案2】:

当您调用logfile(websiteheaders, url) 时,url 将只是您网站数组中的最后一个 url,因此它是唯一会记录在您的日志文件中的。如果我是你,我会将 url->headers 信息保存在字典中并将其传递给你的日志文件。

尝试类似:

headers = {}

然后在你的循环中使用:

response = urllib2.urlopen(url)
headerlist = str(response.info())
headers[url] = headerlist.splitlines()

现在您有了一个字典,其中每个 url 都有一个标题列表。您可以将其传递给您的日志文件函数,然后根据需要记录它。

logfile(headers)

在以下位置阅读词典 http://docs.python.org/2/tutorial/datastructures.html

编辑:修正了我的语法和拼写

【讨论】:

  • 谢谢,我认为应该这样做,但由于我是 Python 中的 nuub,因此我需要几天时间才能将它用于我当前的 logfunction。因为如果我只是在 for 语句中实现它,它实际上什么都不做。
  • 试试for k,v in headers.iteritems(): print k,v 之类的,你会看到如何使用它。
  • 确实我现在看到了这些对,首先是 URL,然后是标题。现在我只需要找到一种方法在标题中找到“服务器”值(字典的值),然后将它们拆分为只打印那条信息......
  • 听起来你已经在路上了。干杯,欢迎使用 Python!
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多