gpt4 book ai didi

Python DBF 模块正在向表导出添加额外的行

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:43 26 4
gpt4 key购买 nike

我正在将 dbf 文件批量导入到 sqlite。我使用 dbf 模块在 python 中编写了一个简单的脚本 http://dbfpy.sourceforge.net/ 。除了少数情况外,它工作正常并且符合预期。在非常谨慎的情况下,模块似乎在它正在读取的表中添加了一些错误的记录。

我知道这听起来很疯狂,但事实似乎确实如此。我已使用 open office 将有问题的 dbase 文件导出到 csv,并使用 .import 将其直接导入到 sqlite,并且 3 个额外记录不存在。

但是如果我使用 python 和 dbfpy 模块迭代该文件,则会添加 3 条额外记录。

我想知道这三个记录是否有可能在 dbf 文件中被标记为已删除,并且虽然对 open office 不可见,但却被 dbf 模块拾取。我可能对这种可能性还很遥远,但我真的对此感到摸不着头脑。

感谢任何帮助。

下面是我读取 dbf 文件的方法示例。我已经删除了循环并使用了一种情况。

conn = lite.connect('../data/my_dbf.db3')
#used to get rid of the 8 byte string error from sqlite3
conn.text_factory = str
cur = conn.cursor()
rows_list = []
db = dbf.Dbf("../data/test.dbf")
for rec in db:
***if not rec.deleted:***
row_tuple = (rec["name"], rec["address"], rec["age"])
rows_list.append(row_tuple)

print file_name + " processed"
db.close()
cur.executemany("INSERT INTO exported_data VALUES(?, ?, ?)", rows_list)

#pprint.pprint(rows_list)
conn.commit()

解决方案好吧,在午餐前又进行了大约半小时的测试后,我发现我可能的假设实际上是正确的,一些文件尚未打包,因此已标记为已删除的记录仍然保留在其中。它们在导出后不应该处于未包装状态,因此这造成了更多困惑。我手动打包了一个文件并进行了测试,它立即返回了正确的结果。

非常感谢您对此的帮助。我在下面给出的解决方案中添加了忽略已删除的记录。我在这个模块中搜索了又搜索这个方法(已删除),但找不到它的 api 文档,我什至查看了代码,但在这一切的迷雾中它一定已经溜走了。感谢一百万的解决方案和帮助人员。

最佳答案

如果您不想丢弃标记为已删除的记录,您可以编写:

for rec in db:
if not rec.deleted:
row_tuple = (rec["name"], rec["address"], rec["age"])
rows_list.append(row_tuple)

关于Python DBF 模块正在向表导出添加额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13395783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com