Python 3.x 如何在Python3中将os.walk()的输出写入文件

Python 3.x 如何在Python3中将os.walk()的输出写入文件,python-3.x,ubuntu-16.04,Python 3.x,Ubuntu 16.04,下面的Python代码将读取“/home/sam”并使用os.walk()遍历它 我们从os.walk()中获得的三个属性,将使用“for”循环读取,然后写入文件“Dir\u traverse\u date.txt” 我的问题是程序何时执行完代码。写入文件“Dir\u traverse\u date.txt”的唯一单词是--None 如何解决这个问题?如何将函数的输出放入文本文件中 ===========================================代码============

下面的Python代码将读取“/home/sam”并使用os.walk()遍历它

我们从os.walk()中获得的三个属性,将使用“for”循环读取,然后写入文件“Dir\u traverse\u date.txt”

我的问题是程序何时执行完代码。写入文件“Dir\u traverse\u date.txt”的唯一单词是--
None

如何解决这个问题?如何将函数的输出放入文本文件中

===========================================代码=====================================

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()

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

您没有返回任何内容。函数不是非类型的吗

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()
导入操作系统
def dir_trav():
os.chdir(“/home/sam”)
打印(“当前目录:”,os.getcwd()
数据=[]
对于os.walk(os.getcwd())中的dirpath、dirname和文件名:
对于文件名中的名称:
filename=os.path.join(dirpath,name)
data.append(文件名)
返回数据
新建文件=打开('Dir\u traverse\u date.txt','w')
对于dir_trav()中的文件名:
新建文件。写入(文件名)
新建_文件。写入('\n');
新建_文件。关闭()

在Python中,return必须后跟希望函数返回的对象。首先,可以在返回行中手动放置硬编码字符串。例如
return“To Sender”
您的文件现在应该包含文本“To Sender”而不是“None”。尝试使用其他一些字符串或偶数。无论您在何处运行
os.walk
,您的输出将始终保持不变。重要的是您在返回旁边放置了什么

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

dir\u trav
实际上并不返回任何内容(这意味着它返回的是
None
,这就是您要写入文件的内容)。您必须从函数中返回一些内容。同样值得注意的是,
os.walk
迭代给定的目录及其子目录。每次迭代都会返回一个目录路径、该路径中的子目录列表以及该路径中的文件列表。它不会像你命名的那样每次迭代都返回一个目录名和一个文件。请提供一个你期望的文件输出的示例。这什么时候可以接受答案?我不能评论,因为我的声誉不到50。这只会返回最后一组
os.walk
迭代器。@MarkTolonen iI知道我修复了它it@MarkTolonen我修好了