回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个学校的项目中,我们正在制定自定义文本为基础的数据库。你知道吗</p>
<p>我有这个功能:</p>
<pre><code>def setRecord(self,mySliceRecord):
print("In setRecord :",mySliceRecord.record)
self.readDB()
print("In setRecord after reading:",mySliceRecord.record)
if self.dbSchema.dbIndex:
self.dbData[mySliceRecord.record[self.dbSchema.dbIndex]] = mySliceRecord
else:
self.dbData.append(mySliceRecord)
return True
</code></pre>
<p>由此调用readDB(),即:</p>
<pre><code>def readDB(self):
dictCounter = 0
if self.dbSchema.dbIndex:
self.dbData = dict()
else:
self.dbData = list()
file = open(self.dbName+'.apd')
for line in file:
counter = 0
splittedLine = line.split("|")
sliceRecord = SliceRecord(self.dbSchema.schema)
for item in splittedLine:
if item:
sliceRecord.record[self.dbSchema.schemaList[counter]] = item.strip()
counter += 1
if self.dbSchema.dbIndex:
self.dbData[sliceRecord.record[self.dbSchema.dbIndex]] = sliceRecord
else:
self.dbData.append(sliceRecord)
</code></pre>
<p>现在发生的事情不知何故,<code>mySliceRecord</code>在<code>setRecord()</code>被修改。这是我的类<code>SliceRecord()</code>的一个自定义对象,它有两个<code>orderedDicts</code>。你知道吗</p>
<p>print语句的输出如下:</p>
<p>在<code>setRecord</code>:<code>OrderedDict([('Name', 'asdklajsweq'), ('Age', 123), ('Email', 'asdasqweqwe')])</code></p>
<p>在<code>setRecord</code>阅读后:<code>OrderedDict([('Name', ''), ('Age', '18'), ('Email', 'asdasd')])</code></p>
<p>在<code>self.readDB()</code>调用之后显示的dict实际上是文本文件中的最后一条记录。你知道吗</p>
<p>它可能与绑定有关,但我不明白的是<code>mySliceRecord</code>变量名在其他地方没有使用。感谢您的帮助。:)</p>
<p>更新:我的<code>readDB()</code>方法也没有按预期工作,所有记录都显示相同的数据。你知道吗</p>
<p>读取文件后<code>self.dbData</code>的输出:</p>
<p><code>Record : OrderedDict([('Name', 'Hello'), ('Age', '20'), ('Email', 'Next')])
Record : OrderedDict([('Name', 'Hello'), ('Age', '20'), ('Email', 'Next')])</code></p>
<p>在文件中我有两个不同的记录,这里重复的记录是文件中的最后一个记录。我没有正确理解内存分配和复制。:—|</p>
<p>PS:别揍我,我只是第二次用python编写代码。你知道吗</p>