我的目标是拥有一个文本文件,允许我将数据附加到最后,并从文件中检索和删除第一个数据条目。基本上我想使用文本文件作为队列(先进先出)。我想到了两种方法来实现这一目标,但我不确定哪种方式更具有Pythonic和效率。第一种方法是使用json库。
import json
def add_to_queue(item):
q = retrieve_queue()
q.append(item)
write_to_queue(q)
def pop_from_queue():
q = retrieve_queue()
write_to_queue(q[1:])
return q[0]
def write_to_queue(data):
with open('queue.txt', 'w') as file_pointer:
json.dump(data, file_pointer)
def retrieve_queue():
try:
with open('queue.txt', 'r') as file_pointer:
return json.load(file_pointer)
except (IOError, ValueError):
return []
看起来非常干净,但每次写/读时都需要对所有json数据进行序列化/反序列化,即使我只需要列表中的第一项。
第二个选项是调用readlines()
和writelines()
来检索并将数据存储在文本文件中。
def add_to_queue(item):
with open('queue.txt', 'a') as file_pointer:
file_pointer.write(item + '\n')
def pop_from_queue():
with open('queue.txt', 'r+') as file_pointer:
lines = file_pointer.readlines()
file_pointer.seek(0)
file_pointer.truncate()
file_pointer.writelines(lines[1:])
return lines[0].strip()
它们都工作正常,所以我的问题是:实现"文本文件队列的推荐方法是什么?#34;?使用json"更好" (更多Pythonic /更快/更高效的内存)比自己读取和写入文件?基于问题的简单性,这两种解决方案看起来都相当复杂;我错过了一种更明显的方法吗?