multy line string连接和写入文本文件

时间:2015-11-27 14:25:41

标签: python

我正在使用python的os库来帮助我做以下事情:

  1. 询问用户路径。
  2. 打印其中包含的所有目录和文件。
  3. 将信息保存在文本文件中。
  4. 这是我的代码:

    import os
    text = 'List:'
    def print_tree(dir_path,text1):
        for name in os.listdir(dir_path):
            full_path = os.path.join(dir_path, name)        
    
            x = name.find('.')
            if x!= -1:
                print name #replace with full path if needed
                text1 = text1 + name
            else:
                print '------------------------------------'
                text1 = text1 + '------------------------------------' 
                print name
                text1 = text1 + name 
    
            if os.path.isdir(full_path):
                os.path.split(name)
                print '------------------------------------'
                text1 = text1 + '------------------------------------'
                print_tree(full_path,text1)
    
    path = raw_input('give me a dir path')
    print_tree(path,text)
    myfile = open('text.txt','w')
    myfile.write(text)
    

    我有两个问题。首先,虽然没有任何错误,但运行此文件后文本文件中实际存在的唯一内容是' List:'。此外,我不知道如何使用字符串连接,以便将每个文件名放在不同的行上。我错过了什么?我怎么能做到这一点?

1 个答案:

答案 0 :(得分:4)

字符串在Python中是不可变的,它们上的+=运算符只是一种幻觉。您可以在函数中连接所需的所有字符串,但除非您返回它,否则函数外部的字符串不会更改:text1 = text1 + 'blah'创建一个新字符串,并将其引用分配给text1。函数外部的字符串没有改变。解决方案是构建一个字符串,然后将其返回:

import os
text = 'List:' + os.linesep
def print_tree(dir_path,text1):
    for name in os.listdir(dir_path):
        full_path = os.path.join(dir_path, name)        

        x = name.find('.')
        if x!= -1:
            print name #replace with full path if needed
            text1 = text1 + name + os.linesep
        else:
            print '------------------------------------'
            text1 = text1 + '------------------------------------' + os.linesep
            print name
            text1 = text1 + name + os.linesep

        if os.path.isdir(full_path):
            os.path.split(name)
            print '------------------------------------'
            text1 = text1 + '------------------------------------' + os.linesep
            text1 = print_tree(full_path,text1)
    return text1

path = raw_input('give me a dir path')
text = print_tree(path,text)
myfile = open('text.txt','w')
myfile.write(text)

我也可以自由地将os.linesep附加到你的连接字符串中。这是默认情况下由print完成的,因此如果您希望事情看起来相同,那么这是一个好主意。