我正在使用python的os库来帮助我做以下事情:
这是我的代码:
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:'。此外,我不知道如何使用字符串连接,以便将每个文件名放在不同的行上。我错过了什么?我怎么能做到这一点?
答案 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
完成的,因此如果您希望事情看起来相同,那么这是一个好主意。