在python中列出文件并保存

时间:2011-12-11 03:39:31

标签: python filesystems directory

我无法保存此输出,也许有人有解决方案。我列出了一个目录和一些单个文件。但是当我保存输出时只捕获目录文件,而不是单个文件。 我的代码:

import os
tosave = open('/tmp/list','ab')
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
    print f
    for top, dirs, files in os.walk(f):
        for nm in files:
            print os.path.join(top, nm)
            try:
                tosave.write(top+nm+'\n')
            finally:
                tosave.close

我在控制台中看到了所有文件和目录,但在保存的列表中,只是ssh文件。为什么不保存syslog和主机呢?

谢谢!

6 个答案:

答案 0 :(得分:1)

您可以尝试在最后添加tosave.flush()。它确实会引起问题。有时,需要刷新调用以将缓冲区的内容清空到文件中。

答案 1 :(得分:1)

检查这是否适合您

import os
tosave = open('/tmp/list','ab')
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
    if os.path.isdir(f):
        for top, dirs, files in os.walk(f):
            for nm in files:
                try:
                    tosave.write(top+nm+'\n')
    if os.path.isfile(f):
        tosave.write(f+'\n')
to.close()

答案 2 :(得分:1)

如果您在粘贴时错过了() tosave.close :(另请选中harsh's answer

此处finally错误。 finally中的代码将在try块之后执行,因此在首次执行tosave.write(top+nm+'\n')后,文件将因tosave.close()而关闭。

您可能打算使用except

            # snip
            try:
                tosave.write(top+nm+'\n')
            except:
                tosave.close()

编辑:要回答您的评论,您希望最后一行与print语句相同:

                tosave.write(os.path.join(top, nm) + '\n')

答案 3 :(得分:1)

在你的帮助下,我找到了一个解决方案,它正在发挥作用。我分享了。

tosave = open('/tmp/list','ab')
    thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
    if os.path.isfile(f):
        print f
        tosave.write(f+'\n')
    else:
        for top, dirs, files in os.walk(f):
            for nm in files:
                print os.path.join(top, nm)
                tosave.write(top+nm+'\n')

谢谢大家的帮助!!!

答案 4 :(得分:0)

也许这是因为你在追加模式下打开文件('a'),然后查看它的开头?看看它的结尾 - 你可能会在那里看到你的新文件。

在附加模式下,每次脚本运行时,将其输出附加到文件中。通常你想要的只是写模式('w'而不是'a'),它每次都会覆盖文件。

答案 5 :(得分:0)

close()放在脚本的末尾。

否则它将在循环的第一步之后关闭文件,使文件不可写。