2017-09-17 39 views
0

下面的Python代碼將讀取「/ home/sam」並使用os.walk()遍歷它。如何將os.walk()的輸出寫入python中的文件3

三個屬性,我們從os.walk()獲得,將使用「for」循環,然後讀取將被寫入到文件「Dir_traverse_date.txt」

我的問題是,當該程序完成執行代碼。寫入文件「Dir_traverse_date.txt」的唯一字是 - None

如何解決這個問題?如何將函數的輸出轉換爲文本文件

================================ CODE = ====================================

import os 

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 
    for dirpath,dirname,filename in os.walk(os.getcwd()): 
     print ("Directory Path ----> ", dirpath) 
     print ("Directory Name ----> ", dirname) 
     print ("File Name  ----> ", filename) 
    return 




funct_out=dir_trav() 

new_file=open('Dir_traverse_date.txt','w') 

new_file.write(str(funct_out)) 

new_file.close() 

======= ================================================== ===============

+0

'dir_trav'並沒有真正返回任何東西(這意味着它返回'None',這就是你要寫入的文件)。 – alfasin

+0

你必須從函數中返回一些東西。另外值得注意的是,'os.walk'迭代給定的目錄及其子目錄。每次迭代都會返回一個目錄路徑,該路徑中的子目錄列表*和該路徑中的*列表文件*。它不會按照您的命名意味着每個迭代返回一個目錄名稱和一個文件。 –

+0

提供您期望的文件輸出示例。 –

回答

-1

你沒有返回任何東西。不是功能NoneTypes?

import os 

def dir_trav(): 
    os.chdir("/home/sam") 
    print("Current Directory: ", os.getcwd()) 
    data = [] 
    for dirpath, dirnames, filenames in os.walk(os.getcwd()): 
     for name in filenames: 
      filename = os.path.join(dirpath, name) 
      data.append(filename) 
    return data 


new_file = open('Dir_traverse_date.txt', 'w') 

for filename in dir_trav(): 
    new_file.write(filename) 
    new_file.write('\n'); 

new_file.close() 
+0

我不能評論,因爲我的聲望不到50。 –

+0

這隻會返回'os.walk'迭代器的最後一組。 –

+0

@MarkTolonen我知道我修好了 –

0

在Python中return後面必須跟着希望函數返回的對象。您可以通過手動將硬編碼的字符串放入返回行開始。例如return "To Sender"您的文件現在應該包含文本「To Sender」而不是「None」。試試這個與其他幾個字符串甚至數字。無論您在哪裏運行os.walk,您的輸出將始終保持不變。重要的是你放在return旁邊的東西。

您的目標是通過os.walk爲您收集的數據構造一個字符串並將其返回。我看到你已經打印了一些數據。讓我們開始通過收集文件名來解決這個問題。從空字符串開始,然後用+=運算符累積輸出。

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 

    output = '' 
    for dirpath, dirname, filename in os.walk(os.getcwd()): 
     output += filename   

    return output 

現在,你會發現,你的輸出就會改變,包括文件名,但他們都會粘在一起端到端(如file1file2file3)這是因爲我們需要確保我們在後插入新行我們正在提取每一條數據。

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 

    output = '' 
    for dirpath, dirname, filename in os.walk(os.getcwd()): 
     output += filename + '\n' 

    return output 

從這一點,你應該能夠接近你正在尋找的結果。字符串連接(+)不是從多個數據構建字符串的最有效方法,但它可以滿足您的需求。

注意:Python中的函數可以返回多個值,但它們在技術上是綁定在基本上是元組的單個對象中。

相關問題