我将下面给出的表单的值存储到文件中:
143 800 'Ask'
213 457 'Comment'
424 800 'Hi'
第一列包含此处的唯一元素。 但是,当我以文件格式存储时,查看第一列的值是非常低效的,在Python中是否有更有效的方法来更快地查找。 我知道python中的字典用于完成此操作,但我正在寻找其他方法。由于数据我有数万亿条记录。因此我不能将它们保存在RAM中的字典中。因此,我正在寻找其他方法。 此外,对于每个程序执行,将在数据库的情况下插入行,如何克服这一点,我在数据库中混淆的一个例子如下:
143 800 'Ask'
213 457 'Comment'
424 800 'Hi'
143 800 'Ask'
213 457 'Comment'
424 800 'Hi'
答案 0 :(得分:2)
这是一个使用sqlite3
的完整代码示例,展示了如何初始化数据库,将数据放入其中,以及获取单行数据。
import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute("""CREATE TABLE Widget (id INTEGER PRIMARY KEY,
serial_number INTEGER,
description TEXT);""")
my_data = [ [143, 800, 'Ask'],
[213, 457, 'Comment'],
[424, 800, 'Hi'] ]
for row in my_data:
conn.execute("INSERT INTO Widget (id, serial_number, description) VALUES (?,?,?);" , row )
conn.commit() # save changes
res = conn.execute("SELECT * FROM Widget WHERE id=143")
row = res.next()
print row #prints (143, 800, u'Ask')
请注意使用特殊文件名:memory:
打开临时数据库。
答案 1 :(得分:1)
您所要求的可能是“数据库表”和“索引”。经典的方法是有一个补充文件(索引),它将表中数据元组的键映射到文件中元组的绝对位置。
答案 2 :(得分:0)
我不明白,您希望能够在文件本身中搜索得更快,还是在python中搜索文件内容?在后者中,使用具有唯一元素作为关键字的字典。
values = {143:[800,'ask'], 213:[457,'Comment'], 424:[800:'Hi']}
答案 3 :(得分:0)
如果您需要在持久性存储中查找内容,请使用数据库。一个例子是sqlite,它是内置的。
答案 4 :(得分:0)
同样在每个程序执行时,将插入行
如果您希望将存储保存在文件中,就像执行此操作一样,那么防止重复条目出现下一次执行的简单解决方案就是首先截断文件。您可以通过使用w
标志打开它来执行此操作:
f = open('filename', 'w')
# ...
f.close()
然而,听起来好像你只是想在程序执行时存储一些数据,即你想保持数据而不使其持久化。如果是这种情况,那么我想知道为什么你实际将内容存储在一个文件中。
更明显的方式,也就是pythonic(虽然它对Python来说不是特别的),是在程序执行期间将它保存在字典中。字典是可变的,因此您可以随时更改其内容:您可以添加新条目,甚至可以在以后获取有关它们的更多信息时更新条目。
我从存储在字典中知道这个,但有时我没有值[143] [1]的值,即字符串'None'存储在其位置
这根本不是问题。您可以轻松存储以143
为键,None
为其值,甚至包含None
值数组的条目:
>>> values[143] = [ None, None ]
这样,字典仍会记住您输入了密钥,因此检查密钥是否在字典中将返回true:
>>> 143 in values
True
除了python中的词典之外还有其他任何方法可以实现相同的目的,我知道词典......我只是在寻找其他方法。
不,通常只有一种方式在Python中做正确的事情,Zen of Python告诉我们:“应该有一个 - 最好只有一个 - 显而易见的方式。“
因此,不,可能没有合适的方法来使用没有词典的词典。但话又说回来,你为什么要寻找其他方式?这听起来并不合适,好像你有充分的理由这样做,如果你有,你必须确保解释为什么某些方法不适合你使用。