将字符串数组添加到JSON文件

时间:2018-05-22 00:31:46

标签: python json

我是否正在尝试将数组中的元素添加到JSON文件中我希望将数组的每个元素放在他们自己的行上我目前有这个

while i < num:
    name1= tweet_list[i]
    name1 = re.sub(r'(https|http)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b|\n|@', '', name1, flags=re.MULTILINE)
    print name1
    judge = input("1 pos, 2 neg, 3 skip: ")
    if judge == 1:
        pos_name.append(name1)
    elif judge == 2:
        neg_name.append(name1)
    i += 1

    with open("pos_names.json", "a") as p:
        json.dump(pos_name, p)
    with open("neg_names.json", "a") as n:
        json.dump(neg_name,n)

此代码将所有元素放在1行,但由于某种原因,文件中前面总是有空元素[]

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在以附加模式打开输出文件("a"标志为第二个参数open),这意味着写入文件的任何内容都将追加< / em>到当前内容;并且您将列表转储到while循环的每次迭代中的文件。 (这也是前面有空列表的原因 - 在前几次迭代期间pos_name和/或neg_name可能仍然是一个空列表。尝试以写入模式"w"打开文件,然后在循环结束后写入json dump 。像这样:

while i < num:
    # etc. what you had before

# this after the loop
with open("pos_names.json", "w") as p:
    json.dump(pos_name, p)
with open("neg_names.json", "w") as n:
    json.dump(neg_name,n)

请注意,这仍会在一行中输出所有内容 - 您可以使用indent kwarg到json.dump来打印它,如果这是您想要的。 (有关用法示例,请参阅python docs。)以下示例(ipython session - json.dumps输出到stdout而不是文件):

In [8]: import json

In [9]: print(json.dumps(['one', 'two', 'three']))
["one", "two", "three"]

In [10]: print(json.dumps(['one', 'two', 'three'], indent=2))
[
  "one",
  "two",
  "three"
]