在更改和删除值后,我有时会得到一个类似于此的.ini文件:
[Section A]
x = 1
d = 2
[Section B]
a = 3
是否有一种简单的方法可以保持清洁并删除各部分之间的空白线?
答案 0 :(得分:1)
如果你想使用严格的python解决方案,你可以创建一个临时文件,复制非空行,然后替换该文件。
from tempfile import mkstemp
from os import close
from shutil import move
def replace(filename, name, new_value):
fd, path = mkstemp()
with open(path,'w') as tmpfile:
with open(filename) as csv:
for line in cvs:
if line.strip()!="":
tmpfile.write(line)
close(fd)
move(path, filename)
答案 1 :(得分:0)
答案 2 :(得分:0)
只需使用sed:
sed '/^$/d' myfile.ini
工作
答案 3 :(得分:0)
也许这可行:
lines = open("file").readlines()
n_lines = ["%s" % line for line in lines if line.strip()]
f = open("file", "w")
f.write("".join(n_lines))
f.close()
我使用列表推导并使用过滤行创建一个新变量。
修改强>
如果您可以为每个部分添加换行符,则可能有效:
lines = open("file").readlines()
n_lines = ["\n%s" % line if "[Sect" in line else line for line in lines if line.strip()]
f = open("file", "w")
f.write("".join(n_lines).lstrip())
f.close()
编辑2:
我不确定......但是
如果您的文件太大而且您使用的Python是3版本,那么您可以使用此代码来获得更好的性能:
def readfile(filepath):
with open(filepath, "r") as f:
for line in f:
yield line
lines = readfile("file")
n_lines = ["\n%s" % line if "[Sect" in line else line for line in lines if line.strip()]
f = open("file", "w")
f.write("".join(n_lines).lstrip())
f.close()