私は複数のファイルに分割したい平文ファイルを持っています。私はへの(および含む)ENDをBEGIN(を含む)から、各ブロックを分割したい再帰を使ってPythonの区切り文字に基づいてテキストファイルを分割する
-----BEGIN CERTIFICATE-----
text1
text2
text3
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
text4
text5
text6
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
text7
text8
text9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
text10
text11
text12
-----END CERTIFICATE-----
:ファイル形式は、このようなものです。
with open('/Users/arl/Downloads/bundle.pem', 'r') as cert_file:
cert = cert_file.readlines()
def parse_file(filename=None, variable=None):
with open(filename, "w") as variable:
for line in cert:
if "BEGIN" in line:
variable.write(line)
continue
elif "END" in line:
variable.write(line)
parse_file(filename="int1.pem", variable="int1_file")
parse_file(filename="int2.pem", variable="int2_file")
parse_file(filename="end.pem", variable="end_file")
print line.rstrip()
variable.write(line)
variable.close()
parse_file(filename="root.pem", variable="root_file")
エラーを私は現在入手:
この
は私がこれまでに書かれたものであるparse_file(filename="int1.pem", variable="int1_file")
File "splitter.py", line 12, in parse_file
parse_file(filename="int1.pem", variable="int1_file")
File "splitter.py", line 17, in parse_file
variable.close()
RuntimeError: maximum recursion depth exceeded while calling a Python object
そしてだけroot.pem
とint1.pem
が書かれている(との両方が同じコンテンツを、持っていた彼らすべきではありません)
ファイルを解析して、新しいブロックをそれぞれ新しいファイルに書き込むには、何が必要ですか?関数が新しいパラメータでそれ自身を呼び出すためのループの正しい点はどれですか?正規表現経由
おかげ
あなたの機能だけで実際にはグローバルファイル(CERT)から読み込むので、あなたの再帰呼び出しは、単にそれが何度も何度もそのファイルから読み込ませる、したがって、無限再帰。 –
あなたは何をしようとしているのか、なぜ再帰を使用するのかは明確ではありません。また、 'variable'をファイルポインタで上書きするので、パラメータは無効になります。 root.pem、int1.pem、int2.pem、end.pemにそれぞれbundle.pemのセクションが1つ含まれるようにしますか? – Stuart
@AlanLeuthard:はい、今は分かります。私は、ファイルの先頭から始めるのではなく、最後にどこから読み続けるかを理解しようとしています。 – ARL