如何将os.walk()的输出写入python中的文件3

问题描述:

下面的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

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

你没有返回任何东西。不是功能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我知道我修好了 –

在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中的函数可以返回多个值,但它们在技术上是绑定在基本上是元组的单个对象中。