2016-02-15 24 views
1

我在寫一個Python腳本,它使用ftplib模塊從ftp位置下載文件。我下載的文件具體命名爲whatsnew.txt,位於{ftp location}/{folder}/{subfolder}之內,並且有很多這樣的文件夾,我下載了位於其中的所有whatsnew.txt字典python中意外的額外ghost值

我這樣做的方式是,在下載之前,我收集了ftp位置的目錄樹,並將其存儲爲字典(我還將此字典格式化爲json文件,並保存在名爲directory_tree.txt)。

現在,當我解析此字典以獲取{文件夾}和{子文件夾}的值時,字典中會出現意外的額外值,具體如圖所示/318/08318是文件夾,08是子文件夾。我不知道這個幽靈入口來自哪裏。

image: error in retrieving from unexpected ftp location

這是出乎意料的,因爲這是有問題的文件夾的樣子:

contents of 318 folder in ftp

沒有frickin' 08子文件夾。

這裏是我的代碼片段(Python 2.7.9),我認爲我出錯了。我該如何解決我的錯誤?我如何解決這個額外的價值?我希望不需要驅魔。希望只是驅魔我的編程不足。謝謝。

for folder in directory_tree["ControlPatch_CPR"]: //Loop for checking dict entries 
    for subfolder in folder: 
     print str(folder) + " --- " + str(subfolder) 
for folder in directory_tree["ControlPatch_CPR"]: 
    for subfolder in folder: 
     if len(subfolder) == 1: 
      subfolder = "0" + subfolder 
     ftp.cwd("/") 
     print "\nretrieving {0}/ControlPatch/{1}/{2}/whatsnew.txt ...".format(ftplocation, folder, subfolder) 
     with open("{0}.{1}.whatsnew.txt".format(folder, subfolder), "wb") as whatsnew: 
      ftp.cwd("/ControlPatch/{0}/{1}".format(folder, subfolder)) 
      print "working directory: " + ftp.pwd() 
      ftp.retrbinary("RETR /ControlPatch/{0}/{1}/whatsnew.txt".format(folder, subfolder), whatsnew.write) 

另外,我很害怕。

+0

此代碼看起來無害。我會首先查看'directory_tree'字典成員中的子文件夾列表。添加前導零的要求看起來很奇怪 - 如果您沒有從實際的FTP服務器列表中填充子文件夾列表,更有理由認爲此代碼存在錯誤,而不是您向我們展示的代碼。也許第一個循環的輸出也會有幫助 - 再次,'str()'調用看起來很可疑。爲什麼這些東西不是已經存在的? – tripleee

+0

自問題解決以來,我發佈了一個答案。順便說一下,你指出的具有'str()'的部分僅用於調試目的,並且對數據沒有影響。雖然我意識到使用'str()'是多餘的:) – jowayow

回答

0

我已修復(?)我的問題,但我無法解釋它。

for folder in directory_tree["ControlPatch_CPR"]: 
    for subfolder in folder: 
     if len(subfolder) == 1: 

到:

for folder in directory_tree["ControlPatch_CPR"]: 
    for subfolder in directory_tree["ControlPatch_CPR"][folder]: 
     if len(subfolder) == 1: 

這部分directory_tree["ControlPatch_CPR"][folder]因此,我以爲這樣做只是subfolder in folderfolder一樣迭代名單從我上面貼的代碼,我從變化的一部分。有人關心解釋嗎?謝謝。

無論如何,問題解決了。呼。我現在可以回到我的電腦。