[英]file won't write in 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()
只要看一眼事情,看来您的问题出在“ w”上。
看来您一直在覆盖 ,而不是追加 。
所以您基本上是遍历文件,
到最后,您只将最后一个文件复制到您的临时文件中。
您可能需要使用“ a”而不是“ w”打开文件。
您的代码(正确缩进,尽管我认为没有缩进,因此它可以运行但不能正常工作)实际上看起来是正确的。 请记住,temp.out将仅是最后一个源文件的替换内容。 可能是该文件只是空白吗?
我注意到有时,如果在file.write之后没有file.close,它将不会打印到文件。
例如,该程序实际上从不保存到文件,它只是生成一个空白文件(除非您在outfile.write之后立即添加outfile.close()。)
outfile=open("ok.txt","w")
fc="filecontents"
outfile.write(fc.encode("utf-8"))
while 1:
print "working..."
@OP,您可能还想尝试fileinput模块(这样,您就不必使用自己的临时文件)
import fileinput
for filename in os.listdir("."):
for line in fileinput.FileInput(filename,inplace=1):
line = line.strip().replace('mrddb2.','shpdb2.')
line = line.strip().replace('MRDDB2.','SHPDB2.')
print line
将“ inplace”设置为1,以就地编辑文件。 设置为0即可正常打印到标准输出
首先,
您忘记了将临时文件复制回原始文件。
其次:
使用sed -i或perl -i代替python。
例如:
perl -i -pe 's/mrddb2/shpdb2/;s/MRDDB2/SHPDB2/' *
我没有确切的答案,但是可能有帮助的是将一些print
线粘贴在重要位置,例如在修改之前先打印每行,然后在修改后再次打印。 然后,在将行修改到文件中之前,将另一行放置在修改之后。 然后在关闭新文件之前执行以下操作:
print secondfile.read()
如果用于调试目的的结果太多,也可以尝试限制获得的结果。 您可以通过在末尾附加下标修饰符来限制字符串输出,例如:
print secondfile.read()[:n]
如果n = 100
,它将输出限制为100个字符。
如果您的代码实际上如帖子中所示缩进,则表示写入正常。 但是,如果失败,则写调用可能在内部for循环之外。
为了确保我没有真正丢失什么,我测试了代码,它对我来说很好用。 也许您可以尝试继续执行除一个特定文件名以外的所有内容,然后在此之后检查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复制回原始文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.