我有一个明文文件,我想分割成多个文件。该文件的格式是这样的:使用递归来分割基于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-----
欲每个块从分裂(并包括)开始(并包括)END。
这是我至今写:
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
被写入(并且都具有相同的内容,这是他们不应该)
为了解析文件并将每个新块写入新文件,我需要做什么?在循环中,函数使用新参数调用自身的正确点是什么?
感谢
你的函数只真正从全局文件(证书)进行读取,因此您的递归调用简单地让它从文件中读取一遍又一遍,因此无限递归。 –
完全不清楚你想要做什么以及为什么要使用递归。另外,你用文件指针覆盖'variable',这样这个参数将不起作用。你是否想要root.pem,int1.pem,int2.pem和end.pem中的每一个都包含bundle.pem中的一个部分? – Stuart
@AlanLeuthard:是的,我现在明白了。我试图弄清楚如何从我上次完成的地方继续阅读,而不是从文件的开始处开始阅读。 – ARL