Python 使用 csv 模块写入 CSV 文件及 JSON 转换方法

Mia
Mia
发布时间:2026-10-15| 4人浏览过
原创

本文介绍如何使用 Python 的 csv 模块将列表数据写入 CSV 文件,重点说明通过设置 newline='' 参数消除多余空行的方法。同时提供将 JSON 数据转换为 CSV 格式的两种方案:直接转换与自定义字段顺序及提取坐标数据的进阶处理,适用于数据抓取后的格式化处理场景。

具体实现步骤如下所示:


 def test_write(self):
 fields=[]
 fields.append(orderCode)
 with open(r'./test001.csv', 'a',newline="") as f:
  writer = csv.writer(f)
  writer.writerow(fields)

首先定义一个列表变量,随后将需要写入 CSV 文件的数据逐项添加到该列表中。

在打开文件时使用 'a' 模式,表示将数据追加到文件的下一行。

在 open 函数中指定 newline='' 参数,用于去除 CSV 文件中每一行中间产生的多余空行;如果不添加此参数,生成的文件在行与行之间会出现空白行。

具体代码中需添加 newline 参数。

未添加 newline 参数时的效果如下:

补充说明:如何利用 Python 将 JSON 数据转换为 CSV 格式。

假设 .json 文件中存储的数据格式如下:


{"type": "Point", "link": "http://www.dianping.com/newhotel/22416995", "coordinates": [116.37256372996957, 40.39798447055443], "category": "经济型", "name": "北京荷塘山庄", "count": "278", "address": "北京市怀柔区黄花城村安四路", "price": "380"}
{"type": "Point", "link": "http://www.dianping.com/newhotel/19717653", "coordinates": [116.56881588256466, 40.43310967948417], "category": "经济型", "name": "慕田峪长城鱼师傅乡村酒店", "count": "89", "address": "北京市怀柔区渤海镇苇店村(慕田峪长城下3公里处,近怀黄路)", "price": "258"}
{"type": "Point", "link": "http://www.dianping.com/newhotel/58365289", "coordinates": [116.62874974822378, 40.45610264855833], "category": "经济型", "name": "北京蜜桃儿亲子客栈", "count": "119", "address": "北京市怀柔区神堂峪风景区下官地11号", "price": "549"}

现在需要将上述数据保存为 CSV 格式,其中字典的 keys 对应 CSV 中的属性名称,字典的 values 对应属性具体的值。

如果仅需按照 JSON 的 keys 直接生成 CSV,操作较为简单,可直接参考以下方法:


#-*-coding:utf-8-*-
import csv
import json
import sys
import codecs
def trans(path):
  jsonData = codecs.open(path+'.json', 'r', 'utf-8')
  # csvfile = open(path+'.csv', 'w') # 此处这样写会导致写出来的文件会有空行
  # csvfile = open(path+'.csv', 'wb') # python2下
  csvfile = open(path+'.csv', 'w', newline='') # python3下
  writer = csv.writer(csvfile, delimiter='\t', quoting=csv.QUOTE_ALL)
  flag = True
  for line in jsonData:
    dic = json.loads(line[0:-1])
    if flag:
      # 获取属性列表
      keys = list(dic.keys())
      print (keys)
      writer.writerow(keys) # 将属性列表写入csv中
      flag = False
    # 读取json数据的每一行,将values数据一次一行的写入csv中
    writer.writerow(list(dic.values()))
  jsonData.close()
  csvfile.close()
if __name__ == '__main__':
  path=str(sys.argv[1]) # 获取path参数
  print (path)
  trans(path)

在 Python 3 环境下运行,命令行输入相应命令。


python C:\Users\MaMQ\Documents\jsonToCsv.py C:\Users\MaMQ\Documents\data\geoFood

其中第三个参数指定了需要转换的文件路径及文件名,运行脚本后即可生成转换后的 CSV 文件。

若需对 JSON 文件中每个字典的 key 字段进行修改,例如将 dict 中的 coordinate 经纬度数据提取出来分别存为 x、y 数据,可参考以下方法(此方法还能调整各属性在 CSV 中的显示顺序,效果更佳):


import csv
import json
import sys
import codecs
def trans(path):
  jsonData = codecs.open(path+'.json', 'r', 'utf-8')
  # csvfile = open(path+'.csv', 'w') # 此处这样写会导致写出来的文件会有空行
  # csvfile = open(path+'.csv', 'wb') # python2下
  csvfile = open(path+'.csv', 'w', newline='') # python3下
  writer = csv.writer(csvfile, delimiter='\t', quoting=csv.QUOTE_ALL)
  keys=['id', 'name', 'category', 'price', 'count', 'type', 'address', 'link', 'x', 'y']
  writer.writerow(keys)
  i = 1
  for dic in jsonData:
    dic = json.loads(dic[0:-1])
    x = dic['coordinates'][0]
    y = dic['coordinates'][1]
    writer.writerow([str(i),dic['name'],dic['category'],dic['price'],dic['count'],dic['type'],dic['address'],dic['link'],x,y])
    i += 1
  jsonData.close()
  csvfile.close()
if __name__ == '__main__':
  path = str(sys.argv[1])
  print (path)
  trans(path)

运行方式与前述方法相同。

该 JSON 文件来源于大众点评的数据抓取,存储格式为 utf-8。建议使用 codecs 包来读取 JSON 数据,以便指定编码方式。


jsonData = codecs.open(path + '.json', 'r', encoding='utf-8')

以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。如有错误或未考虑周全之处,欢迎批评指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。