将队列保存到文件

时间:2015-10-26 15:33:53

标签: python json python-2.7 file-io queue

我的目标是拥有一个文本文件,允许我将数据附加到最后,并从文件中检索和删除第一个数据条目。基本上我想使用文本文件作为队列(先进先出)。我想到了两种方法来实现这一目标,但我不确定哪种方式更具有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 /更快/更高效的内存)比自己读取和写入文件?基于问题的简单性,这两种解决方案看起来都相当复杂;我错过了一种更明显的方法吗?

0 个答案:

没有答案