私は時々値を変更し、削除した後、このようになります.iniファイルを取得:configparserファイルで空行をクリーンアップするにはどうすればよいですか?
[Section A]
x = 1
d = 2
[Section B]
a = 3
は清潔に保つと節の間にそれらの空白行を削除する簡単な方法はありますか?おそらく
私は時々値を変更し、削除した後、このようになります.iniファイルを取得:configparserファイルで空行をクリーンアップするにはどうすればよいですか?
[Section A]
x = 1
d = 2
[Section B]
a = 3
は清潔に保つと節の間にそれらの空白行を削除する簡単な方法はありますか?おそらく
多分これは動作することができます:
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()
を私はリストの内包表記を使用して、フィルタラインを使用して新しい変数を作成します。
EDIT
あなたは、各セクションの改行を追加することができた場合、これは多分動作することができます:
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()
EDIT 2:
私はわからないんだけど...しかし
ファイルが非常に大きく、作業するPythonが3バージョンの場合は、おそらくcパフォーマンス向上のために使用このコード:
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()
はジャストsedを使用します。
sed '/^$/d' myfile.ini
あなたは厳密にpythonのソリューションを使用したい場合、あなたは、一時ファイルを作成する非空行をコピーして、交換することができ
sed。それは基本的なPythonライブラリの一部ですか? – Dima
おそらく '-i'がインプレースで動作します。 –
@Dima:これは標準のUnixツールです。LinuxまたはOS Xの場合、デフォルトでインストールされます。 –
の作品ファイル。
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)
%:n_lines = [line.strip()ならば行内の行] – Dima
はい、 '%'なしで 'line'の値を得ることができます。 – kip
素晴らしいです。各セクションの後に空白行が1つ残っていれば完璧ですが、もう少し複雑になると思います。たぶん、各 "["と "\ n ["最初の "[" – Dima