<p>这可能是个坏主意,因为你下周会回来问,“所以我有一个奇怪格式的文件,但我不知道如何解析它……”正如史蒂文·伦巴尔斯基在一篇评论中所建议的,你几乎肯定想做的是要么把它写成一个大的JSON文本,要么把它写成一个CSV文件。其中任何一个都是琐碎的编写,就像琐碎的解析,也是人类可读和可编辑的。你知道吗</p>
<p>但是如果你真的想要这种格式,你只需要精确地描述它,然后它应该很容易变成代码。你知道吗</p>
<p>没有一种格式会像<code>json.dump(x, fo)</code>或<code>csv.writer(fo).writerows(x)</code>那么简单,但这是因为广泛使用的格式都有很好的库,使它们易于编写,而特殊格式则不然。你知道吗</p>
<p>但不会那么难。你知道吗</p>
<p>例如,我对您的规则的第一个猜测是,您想要的正是列表的repr,但没有括号:</p>
<pre><code>fo.write(str(item).strip('[]') + "\n")
</code></pre>
<p>当然,这个非常相似的规则也为您的示例提供了相同的输出,但如果您可能有三重嵌套列表,则会有所不同:</p>
<pre><code>fo.write(str(item)[1:-1] + "\n")
</code></pre>
<p>这条规则也非常相似,但有细微的不同:</p>
<pre><code>fo.write(', '.join(map(repr, item)) + "\n")
</code></pre>
<p>你想要哪一个?我不知道,但你大概知道。你知道吗</p>
<hr/>
<p>当然,你也要求在任何一行前面加<code>[</code>,在所有行后面加<code>]</code>,所以你也必须明确地加上:</p>
<pre><code>fo.write('[\n')
for item in x :
# whichever rule you wanted from above
fo.write(']\n')
</code></pre>
<hr/>
<p>从您的编辑中,似乎需要一些不寻常的缩进和空行,因此您也必须明确地这样做:</p>
<pre><code>fo.write(' [\n\n')
for item in x:
# whichever rule you wanted from above
# but with a ' ' prefixed to the string
fo.write('\n . ]\n')
</code></pre>
<p>另外,您的一些行现在以最后的<code>,</code>结束,但其他行则没有。我不知道这个规则是什么,不过,如果你能解释的话,我相信你能编出来。你知道吗</p>