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

时间:2017-09-17 00:31:25

标签: python-3.x ubuntu-16.04

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

我们从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()

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

2 个答案:

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

答案 1 :(得分:-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()