如何清理configparser文件中的空行?

时间:2017-04-25 21:54:49

标签: python

在更改和删除值后,我有时会得到一个类似于此的.ini文件:

[Section A]
x = 1
d = 2



[Section B]
a = 3

是否有一种简单的方法可以保持清洁并删除各部分之间的空白线?

4 个答案:

答案 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)

使用像grep

这样的工具可能更容易
$ grep -v "^\\s*$" foo > bar

但是如果你必须使用Python,那么请查看this answer

答案 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()

Reference