脚本无法打开并同时附加多个文件

时间:2015-06-28 03:05:06

标签: python-2.7 file-writing listiterator

所以试图完成一个非常简单的脚本,给了我一个难以置信的艰难时期。它应该遍历指定的目录并打开其中的所有文本文件,并使用相同的指定字符串将它们全部附加。

问题是它根本没有对文件做任何事情。使用print来测试我的逻辑我用print f(写入和关闭函数)替换了第10行和第11行,并得到以下输出:

<open file '/Users/russellculver/documents/testfolder/.DS_Store', mode 'a+' at

所以我认为它将正确的文件存储在写入函数的f变量中,但是我不熟悉Mac如何处理DS_STORE或它在临时位置跟踪中扮演的确切角色。 / p>

这是实际的脚本:

import os

x = raw_input("Enter the directory path here: ")

def rootdir(x):
    for dirpaths, dirnames, files in os.walk(x):
        for filename in files:
            try:
                with open(os.path.join(dirpaths, filename), 'a+') as f:
                    f.write('new string content')
                    f.close()
            except:
                print "Directory empty or unable to open file."
            return x
rootdir(x)

执行后终端的确切回复:

Enter the directory path here: /Users/russellculver/documents/testfolder
Exit status: 0
logout

[Process completed]

然而,没有任何内容写入提供目录中的.txt文件。

2 个答案:

答案 0 :(得分:1)

缩进在问题中的方式,在写完第一个文件后立即从函数返回;任何一个for循环永远不会完成。由于您只打印了一个输出文件,因此相对容易推测。

由于你没有对rootdir函数的结果做任何事情,我只是完全删除return语句。

抛开:当您使用with语句打开文件时,不需要使用f.close():它将自动关闭(即使在异常时)。这实际上是引入了with语句的内容(如果需要,请参阅上下文管理器上的内容)。

要完成,这里的功能就像我(大致)写的那样:

def rootdir(x):
    for dirpaths, dirnames, files in os.walk(x):
        for filename in files:
            path = os.path.join(dirpaths, filename)
            try:
                with open(path, 'a+') as f:
                    f.write('new string content')
            except (IOError, OSError) as exc:
                print "Directory empty or unable to open file:", path

(请注意,我只捕获相关的I / O错误;不会捕获任何其他异常(尽管不太可能),因为它们可能与不存在/不可写的文件无关。)

答案 1 :(得分:0)

返回错误,在单个循环后结束迭代。甚至没必要,所以完全被删除了。