所以试图完成一个非常简单的脚本,给了我一个难以置信的艰难时期。它应该遍历指定的目录并打开其中的所有文本文件,并使用相同的指定字符串将它们全部附加。
问题是它根本没有对文件做任何事情。使用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文件。
答案 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)
返回错误,在单个循环后结束迭代。甚至没必要,所以完全被删除了。