文件在Python中无法写入
我想在当前目录下的所有文件中替换一个字符串,但不知道为什么我的临时文件变成空的了。看起来我的.write方法没有正常工作,可能是因为第二个文件是在它的作用域之外声明的吧?我刚学Python,所以还在努力学习中……谢谢!
补充:我知道我的临时文件现在没有被复制。我也知道有更有效的方法来做这个。我这样做是为了练习。如果有人能具体告诉我为什么.write方法在这里不起作用,那就太好了。谢谢!
import os
import shutil
for filename in os.listdir("."):
file1 = open(filename,'r')
secondfile = open("temp.out",'w')
print filename
for line in file1:
line2 = line.replace('mrddb2.','shpdb2.')
line3 = line2.replace('MRDDB2.','SHPDB2.')
secondfile.write(line3)
print 'file copy in progress'
file1.close()
secondfile.close()
8 个回答
0
为了确保我没有漏掉什么,我测试了一下代码,结果对我来说运行得很好。也许你可以尝试对除了一个特定文件以外的所有文件都使用continue,然后在那之后检查一下temp.out的内容。
import os
for filename in os.listdir("."):
if filename != 'findme.txt': continue
print 'Processing', filename
file1 = open(filename,'r')
secondfile = open("temp.out",'w')
print filename
for line in file1:
line2 = line.replace('mrddb2.','shpdb2.')
line3 = line2.replace('MRDDB2.','SHPDB2.')
print 'About to write:', line3
secondfile.write(line3)
print 'Done with', filename
file1.close()
secondfile.close()
另外,正如其他人提到的,你每次处理新文件时都会覆盖temp.out文件。你还导入了shutil,但似乎并没有用到它。你是不是忘了把temp.out复制回原来的文件了?
2
你的代码(缩进是正确的,不过我觉得没有办法让它缩进得当但又不正常运行)看起来其实是对的。要记住,temp.out 只会包含最后一个源文件的替换内容。难道那个文件只是空的吗?
5
看起来你的问题出在'w'这个地方。
你似乎一直在覆盖,而不是追加。
所以你实际上是在循环处理文件,
到最后你只把最后一个文件复制到了临时文件里。
你可能想用'a'来打开文件,而不是'w'。