文件在Python中无法写入

2 投票
8 回答
6019 浏览
提问于 2025-04-15 12:11

我想在当前目录下的所有文件中替换一个字符串,但不知道为什么我的临时文件变成空的了。看起来我的.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'。

撰写回答