2009-08-13 175 views
1
class __init__: 
    path = "articles/" 
    files = os.listdir(path) 
    files.reverse() 

    def iterate(Files, Path): 

     def handleXml(content): 

      months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

      parse = re.compile('<(.*?)>(.*?)<(.*?)>').findall(content) 
      day = parse[1][1] 
      month = months[int(parse[2][1])] 
      dayN = parse[3][1] 
      year = parse[4][1] 
      hour = parse[5][1] 
      min = parse[6][1] 
      amPM = parse[7][1] 
      title = parse[9][1] 
      author = parse[10][1] 
      article = parse[11][1] 
      category = parse[12][1] 

     if len(Files) > 5: 
      del Files[5:] 

     for file in Files: 
      file = "%s%s" % (Path, file) 
      f = open(file, 'r') 
      handleXml(f.read()) 
      f.close() 

    iterate(files, path) 

它在啓動時運行,並且如果我檢查文件數組,它包含所有文件名。 但是,當我循環他們,他們只是不工作,只顯示第一個。 如果我返回文件,我只會得到前兩個,如果我甚至在重複文件中返回解析,它也不相同。 這沒有任何意義。Python循環讀取和解析目錄中的所有文件

我想使用Python做一個簡單的博客,並且因爲我的服務器有一個非常舊的Python版本我不能使用像glob這樣的模塊,所有事情都需要儘可能基本。

files數組包含目錄中的所有文件,這對我來說已經足夠了。我不需要瀏覽articles目錄中的其他目錄。

但是,當我嘗試輸出解析,即使在重複的文件我得到不同的結果。

感謝,

  • 湯姆
+0

您發佈的代碼不會調用iterate()函數,也不會打印任何內容。請發佈完整的代碼。 – 2009-08-13 15:35:14

+0

此外,縮進看起來是錯誤的,這在Python中顯然非常重要。請嘗試修復它,使其看起來與您在文本編輯器中的效果完全相同。 – 2009-08-13 15:36:27

回答

1

難道是因爲:

del Files[5:] 

它從原來的列表中刪除最後5項爲好。除了使用del的,你可以嘗試:

for file in Files[:5]: 
    #... 
+0

沒有工作,但很好的方式刪除兩行並保留原始數組。 謝謝 – Tom 2009-08-14 20:44:58

0

正如評論指出,實際的遞歸丟失。
即使它在代碼的其他地方存在,遞歸調用也是事情發生錯誤的典型地方,爲此我建議您仔細檢查一下。

但是,爲什麼不使用os.walk?它遍歷所有路徑,而不需要重新創建(遞歸)輪。但是,它已經在2.3版本中引入了,我不知道你的Python是多大年紀。

+0

我的陣列不是問題,它是別的。如果我打印數組,它會顯示所有文件。 – Tom 2009-08-14 20:54:46

+0

你可以檢查一下陣列的長度嗎?我問,因爲有可能你有一個1-2個字符串元素的數組,所有文件名都以空格分隔。 – 2009-08-15 01:18:05

相關問題