【问题标题】:file crawler OSError文件爬虫 OSError
【发布时间】:2012-10-21 23:58:31
【问题描述】:

我希望它递归调用手动输入的文件中列出的下一个文件。它是文件中列出的第一个单词。

当前的错误信息是:

OSError: [Errno 22] Invalid argument: 'file1.txt\n'.

这是我当前的代码:

import os
def crawl(fname):
infile = open(fname, 'r')
if os.stat(fname)[6]==0:
    return "Visiting {}".format(fname)
    infile.close()
else:
    print ("Visiting {}".format(fname))
    lines = infile.read().splitlines()
    nextfile = lines[0].strip()
    for line in lines:
        crawl(nextfile)

【问题讨论】:

  • 这个函数怎么调用?

标签: python recursion python-3.x


【解决方案1】:

试试:

import os
def crawl(fname):
    with open(fname, "r") as infile:
        print("Visiting {}".format(fname))
        if os.stat(fname).st_size:
            lines = infile.read().splitlines()
            for line in lines:
                crawl(line)

【讨论】:

  • 谢谢,但另一个问题,我想确保我的“if”语句有效。 os.stat(fname)[6]==0 会检查文件是否为空正确吗?
  • 是的,这个检查是绝对正确的。不过os.stat(fname).st_size 更清楚。
  • 这段代码还是有问题,卡在file1.txt上。它读取file3.txt,但不输出:“Visiting file3.txt” 它输出:“Visiting file1.txt” 然后关闭。
  • 抱歉,我还是习惯了这个网站的格式。
  • 可以说我希望代码尝试列出的第二个文件。行[1]。如果行 [0] 的文件为空。
【解决方案2】:

我很确定问题在于您从第一个文件中读取的文件名末尾有一个换行符。您可以轻松修复它,使用strip 方法删除换行符:

nextfile = lines[0].strip()

【讨论】:

  • 我试过了,但我发现它现在有不同的问题。它运行一次递归,然后停止。
  • @JasonSchayer 可能我的回答有助于解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2012-01-13
  • 2012-08-08
  • 1970-01-01
相关资源
最近更新 更多