Python JSON格式-具有多行的多个文件

Python JSON格式-具有多行的多个文件,python,json,Python,Json,我有多个文件,需要将它们格式化为一个JSON文件: 下面是我拥有的一个文件示例: {“t”:“测试”,“标题”:“测试”,“内容”:“测试”} {“t”:“test2”,“title”:“test2”,“content”:“test2”} 我需要的是像这样: [ {“t”:“测试”,“标题”:“测试”,“内容”:“测试”} {“t”:“test2”,“title”:“test2”,“content”:“test2”} ] 我尝试过的: 我有以下python代码: import io import

我有多个文件,需要将它们格式化为一个JSON文件:

下面是我拥有的一个文件示例:

{“t”:“测试”,“标题”:“测试”,“内容”:“测试”}

{“t”:“test2”,“title”:“test2”,“content”:“test2”}

我需要的是像这样:

[

{“t”:“测试”,“标题”:“测试”,“内容”:“测试”}

{“t”:“test2”,“title”:“test2”,“content”:“test2”}

]

我尝试过的:

我有以下python代码:

import io
import os
import json

def wrap_files_in_dir(dirname):


data = {}

list_of_reviews = []


for filename in os.listdir(dirname):
    file_path = os.path.join(dirname, filename)
    if os.path.isfile(file_path):
        with io.open(file_path, 'r', encoding='utf-8', errors='ignore') as rfile:
            contents = rfile.read()
            list_of_reviews.append(contents)




with io.open('AppStoreReviews.json', 'w', encoding='utf-8' , errors='ignore') as wfile:
    data["reviews"] = list_of_reviews
    wfile.write(unicode(json.dumps(data, ensure_ascii=False)))


if __name__ == '__main__':
wrap_files_in_dir('/Users/Jack/PycharmProjects/MyProject')

print("Your Reviews marged and converted to JSON")
我知道我在这里丢失了一些输入到我目录中每个文件的代码。。或者是别的什么?
有人能帮我吗?

如果您只需要在目录中的每个文件周围添加
{
}
,这很容易做到:

import io
import os

def wrap_files_in_dir(dirname):
    """For every file in the given directory, wrap its contents in brackets."""
    for filename in os.listdir(dirname):
        file_path = os.path.join(dirname, filename)
        if os.path.isfile(file_path):
            with io.open(file_path, 'r', encoding='utf-8') as rfile:
                contents = rfile.read()
            with io.open(file_path, 'w', encoding='utf-8') as wfile:
                wfile.write(u'{\n')
                wfile.write(contents)
                wfile.write(u'}\n')

if __name__ == '__main__':
    wrap_files_in_dir('/Path')
请注意,此实现有几个假设:

  • 硬编码路径是有效的目录名
  • 给定目录中的每个文件都可由当前进程读写
  • 给定目录中每个文件的内容都将放入内存中
  • 给定目录中的每个文件都是编码为UTF-8的文本文件
  • 按字面意思添加
    {
    }
    将生成正确的输出文件
  • 给定目录中的文件没有被另一个进程同时修改

我看不出你想做什么的目的?它看起来像是一种固定格式的管道胶带方法。为什么不使用
json
模块解析其中的内容并将其转储回?任意添加大括号并不一定会生成有效的jsonDupe:我猜Jack想要更新文件的内容,以添加{开头和}结尾。实际上,你不想盲目地做这种事情。正如@roganjosh所建议的,明确定义您想要做的事情。你能指定文件的内容吗?Python是一种很棒的语言,有很多方法可以做事情,而且一定要避免你试图做的事情。你在同一个文件中读写,所以你不太清楚你想解决什么问题。可能创建一个新文件并在完成后重命名/移动。如果您试图将数据保存为json字符串,请按照其他人的建议格式化数据。您使用的是哪种Python版本?我使用Python2.7并得到下一个错误:TypeError:必须是unicode,而不是strAh,如果您使用的是Python2.x,那么这些必须是
unicode
常量:使用
u'{\n'
。我将进行编辑以澄清这一点。(在Python3.0及更新版本中,所有字符串默认为unicode。)仍然得到一些错误:wrap_files_In_dir中的第17行(“/Users/Jack/Desktop/Projects/temp”)文件“jsonformatting.py”,第10行,在wrap\u files\u in\u dir contents=rfile.read()文件“/System/Library/Frameworks/Python.framework/Versions/2.7/codecs.py”,第302行,在解码(结果,消耗)=self.\u buffer\u解码(数据,self.errors,final)UnicodeDecodeError:“utf8”编解码器无法解码第23位的字节0x87:无效的起始字节。这是因为我列出的一个假设是无效的:所讨论的文件并非全部编码为UTF-8。它们是什么编码?0x87不是有效的ASCII值--ASCII仅定义127个字符,因此0x7F是最高定义值。您的文本可能是ASCII的扩展。如果您使用的是拉丁字母版的Windows,那么代码页1252(encoding='cp1252')是一个合理的猜测。