2012-10-21 79 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可能我的答案有助於解決這個問題。 –