派森 #P128. csv存json格式

描述

编写一个 Python 程序,读取movie.in(csv格式,utf-8编码) 的数据,将数据转成保存到movie.out(接送格式,utf-8编码)文件中。

格式

输入

movie.in文件,测试格式,utf-8编码。

输出

movie.out,json格式,utf-8编码

样例

输入

movie.in

输出

moive.out

输出文件格式

[
    {
        "片名": "肖申克的救赎",
        "上映年份": "1994",
        "评分": "9.7",
        "评价人数": "2317937",
        "导演": "弗兰克·德拉邦特",
        "编剧": "弗兰克·德拉邦特 / 斯蒂芬·金",
        "主演": "蒂姆·罗宾斯 / 摩根·弗里曼 / 鲍勃·冈顿 / 威廉姆·赛德勒 / 克兰西·布朗 / 吉尔·贝罗斯 / 马克·罗斯顿 / 詹姆斯·惠特摩 / 杰弗里·德曼 / 拉里·布兰登伯格 / 尼尔·吉恩托利 / 布赖恩·利比 / 大卫·普罗瓦尔 / 约瑟夫·劳格诺 / 祖德·塞克利拉 / 保罗·麦克兰尼 / 芮妮·布莱恩 / 阿方索·弗里曼 / V·J·福斯特 / 弗兰克·梅德拉诺 / 马克·迈尔斯 / 尼尔·萨默斯 / 耐德·巴拉米 / 布赖恩·戴拉特 / 唐·麦克马纳斯",
        "类型": "剧情 / 犯罪",
        "国家/地区": "美国",
        "语言": "英语",
        "时长(分钟)": "142"
    },
    {
        "片名": "霸王别姬",
        "上映年份": "1993",
        "评分": "9.6",
        "评价人数": "1720638",
        "导演": "陈凯歌",
        "编剧": "芦苇 / 李碧华",
        "主演": "张国荣 / 张丰毅 / 巩俐 / 葛优 / 英达 / 蒋雯丽 / 吴大维 / 吕齐 / 雷汉 / 尹治 / 马明威 / 费振翔 / 智一桐 / 李春 / 赵海龙 / 李丹 / 童弟 / 沈慧芬 / 黄斐 / 徐杰",
        "类型": "剧情 / 爱情 / 同性",
        "国家/地区": "中国",
        "语言": "汉语普通话",
        "时长(分钟)": "171"
    },
    略...
]

代码:

import json
fr = open('movie.in', 'r', encoding='utf-8')
fw = open('movie.out', 'w', encoding='utf-8')
lst = []
for line in fr:
    line = line.replace("\n", "")
    lst.append(line.split(","))
fr.close()
for i in range(1, len(lst)):
    lst[i] = dict(zip(lst[0], lst[i]))
json.dump(lst[1:], fw, indent=4, ensure_ascii=False)
fw.close()

代码解析:

  1. import json:导入JSON模块,用于处理JSON格式的数据。
  2. fr = open('movie.in', 'r', encoding='utf-8'):打开名为'movie.in'的文件,以只读模式读取('r'),使用UTF-8编码(encoding='utf-8'),并将文件对象赋值给变量fr
  3. fw = open('movie.out', 'w', encoding='utf-8'):打开名为'movie.out'的文件,以写入模式('w'),使用UTF-8编码(encoding='utf-8'),并将文件对象赋值给变量fw
  4. lst = []:创建一个空列表lst,用于存储读取的数据。
  5. for line in fr::遍历文件对象fr中的每一行数据,并将每一行赋值给变量line
  6. line = line.replace("\n", ""):使用字符串的replace()方法将每一行末尾的换行符"\n"替换为空字符串"",去除换行符。
  7. lst.append(line.split(",")):使用字符串的split()方法按逗号","将每一行分割成多个部分,并将分割后的结果作为列表添加到lst中。例如,如果一行是"电影1,导演1,主演1",则会变成列表["电影1", "导演1", "主演1"]。
  8. fr.close():关闭文件fr
  9. for i in range(1, len(lst))::遍历列表lst中从索引1开始到最后的部分。这里通过range()函数生成一个范围,从1到len(lst)(列表长度)。
  10. lst[i] = dict(zip(lst[0], lst[i])):使用zip()函数将第一个元素和当前元素对应的部分打包成一个元组,然后使用dict()函数将元组转换为字典。将转换后的字典赋值给列表lst中当前的元素,实现将每一行的数据与第一行(即表头)对应起来,形成键值对的结构。
  11. json.dump(lst[1:], fw, indent=4, ensure_ascii=False):使用JSON模块的dump()函数将列表lst中从索引1开始到最后的部分转换为JSON格式,并将结果写入到文件fw中。参数indent=4指定缩进为4个空格,ensure_ascii=False表示不对非ASCII字符进行转义。
  12. fw.close():关闭文件fw

功能是读取名为'movie.in'的文件中的数据,将其中的每一行按逗号分割成多个部分,并将每一行数据与第一行(表头)对应起来形成键值对的结构。然后将转换后的数据以JSON格式写入到名为'movie.out'的文件中。

猜你喜欢

转载自blog.csdn.net/m0_63501513/article/details/132417298