【问题标题】:Reading/Writing/Appending using json module使用 json 模块读/写/追加
【发布时间】:2014-01-10 15:33:07
【问题描述】:

这里有人向我推荐了一些代码,但我仍然需要一些帮助。这是推荐的代码:

import json
def write_data(data,filename):
    with open(filename,'w') as outfh:
        json.dump(data,outfh)

def read_data(filename):
    with open(filename, 'r') as infh:
        json.load(infh)

写入代码正常,但读取代码输入数据后没有返回任何字符串:

read_data('player.txt')

我想做的另一件事是能够指定要打印的行。对于这个项目/驱魔来说,也非常重要的一点是能够将字符串附加到我的文件中。感谢任何可以帮助我的人。

编辑:我需要将字符串存储在可以转换为值的文件中。 IE;

name="Karatepig"

是我要存储的东西,以便在我需要加载以前的一组数据或类似的东西时调用这些数据。

我是 python 的菜鸟,所以我不知道什么是最好的,无论是列表还是字典;我以前没有真正使用过字典,也不知道如何将字符串转换为值。

【问题讨论】:

  • 您确实需要将结果分配给一个变量:data = readdata('player.txt')。
  • 您需要向我们展示您正在编写的数据;它是字典还是列表,您正在编写和阅读的数据中包含什么?
  • 已编辑。再说一次,我在 python 上的工作时间基本上只有 3 个小时左右,所以放轻松,呵呵。

标签: python json file python-2.7


【解决方案1】:

假设你有一本这样的字典:

data = {'name': 'Karatepig', 'score': 10}

您的write_data 函数很好,但是您的read_data 函数需要在从文件中读取数据后实际返回数据:

def read_data(filename):
    with open(filename, 'r') as infh:
        data = json.load(infh)
    return data

data = read_data('player.json')

现在假设您要打印名称并更新分数:

print data['name']
data['score'] += 5  # add 5 points to the score

然后您可以使用write_data 函数将数据写回磁盘。您不能使用json 模块将数据附加到文件中。您需要实际读取文件、修改数据并再次写入文件。这对于少量数据来说还不错,但可以考虑将数据库用于大型项目。

您使用列表还是字典取决于您要执行的操作。在任何人推荐一种方法之前,您需要解释您要完成的工作。字典存储分配给键的值(见上文)。列表是没有键的项目的集合,可以使用索引进行访问。

不清楚您所说的“将字符串转换为值”是什么意思。请注意,上面的代码使用字典键“name”显示了字符串“Karatepig”。

【讨论】:

  • 这正是我所需要的。太感谢了。但是有一个问题;当我读回数据时,我在那里得到了这个“u”。可以解决吗?
  • @Karatepig:这意味着你有一个 unicode 字符串。除非您将字节字符串(没有 u 前缀)和值超出 ASCII 范围的 unicode 字符串混合在一起,否则您不必担心。
  • @Karatepig:如果您对差异感兴趣,请参阅docs.python.org/2/howto/unicode.html。 json 模块返回 unicode 字符串,因为 JSON 标准始终指定字符串为 Unicode。
  • @MartijnPieters 好的,谢谢。我还在学习,所以真的任何类型的阅读都有帮助。
猜你喜欢
  • 2016-08-13
  • 2011-01-24
  • 2011-08-03
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多