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