2012-10-21 76 views
1

我想这个以递归方式调用手动输入文件中列出的下一个文件。这是文件中列出的第一个单词。文件爬虫OSError

的当前错误messege是:

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) 
+0

你如何调用这个函数? –

+0

抓取('file0.txt') –

回答

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) 
+0

谢谢,但另一个问题,我想确保我的“if”声明正在工作。 os.stat(fname)[6] == 0将检查文件是否为空是否正确? –

+0

是的,这个检查是绝对正确的。然而'os.stat(fname).st_size'更清晰。 –

+0

这个代码仍然存在问题,它会卡在file1.txt上。它读取file3.txt,但不输出:“访问file3.txt”它输出:“访问file1.txt”然后它关闭。 –

1

我敢肯定,问题是,你在的结束得到一个换行符您正在从第一个文件读取的文件名。您可以轻松地解决这个问题,通过使用strip方法来删除换行符:

nextfile = lines[0].strip() 
+0

我试过了,但是我发现它现在有一个不同的问题。它运行递归一次,然后停止。 –

+0

@JasonSchayer可能我的答案有助于解决这个问题。 –