擅长:python、mysql、java
<p>首先,假设这八个字段是唯一的字段,这里有一个更简单的阅读方法:</p>
<pre><code>def read_bookfile(filename="a.txt"):
with open(filename) as f:
return [Book(*line.split('/')) for line in f]
</code></pre>
<p>现在,要保存:</p>
^{pr2}$
<p>假设<code>Book</code>模型只是在传递这些属性时将它们保存(作为字符串)。在</p>
<p>说明:</p>
<ul>
<li><code>with</code>语句打开文件,并确保在控件从语句中传出时文件被关闭,即使出现异常或类似的情况。在</li>
<li>最好将文件名作为参数传入,因为它允许您在不更改函数的情况下使用不同的文件名;这将使用默认参数,这样您仍然可以用相同的方式调用它。在</li>
<li><code>[... for line in f]</code>是一种列表理解,它与执行<code>lst = []; for line in f: lst.append(...)</code>类似,但编写和运行速度更快。在</li>
<li>在<code>'w'</code>模式下打开一个文件,可以对其进行写入。请注意,这将删除文件中已经存在的内容;您可以使用<code>'a'</code>或{<cd7>}来避免这种情况,但这需要更多的工作来协调现有内容与您的图书列表。在</li>
<li><code>read_bookfile</code>中的<code>*</code>将一个列表拆分,就像您将它们作为单独的参数传递给函数一样。在</li>
<li><code>'/'.join()</code>获取字符串列表并使用斜杠将它们连接在一起:<code>'/'.join(["a", "b", "c"])</code>是<code>"a/b/c"</code>。但是它需要字符串,这就是我为什么要<code>str(isbn)</code>(因为<code>book.isbn</code>是一个int)。在</li>
</ul>