前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于python读写csv表格的例子

关于python读写csv表格的例子

作者头像
python与大数据分析
发布2022-03-11 14:11:30
6150
发布2022-03-11 14:11:30
举报
文章被收录于专栏:python与大数据分析

CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。

python csv 模块实现了 CSV 格式表单数据的读写。

csv 模块中的 reader 类和 writer 类可用于读写序列化的数据。也可使用 DictReader 类和 DictWriter 类以字典的形式读写数据。

本文和之前excel的处理有点像,就是基于某些通用字段对csv文件进行切割,还要考虑到缺了这个通用字段的场景,该字段某个值为空的场景。

详细参考见:https://docs.python.org/zh-cn/3/library/csv.html

writer类可用于写序列化的数据

DictWriter类以字典的形式写数据,创建一个对象,该对象在操作上类似常规 writer,但会将字典映射到输出行。

reader类可用于读序列化的数据

DictReader类以字典的形式读数据,创建一个对象,该对象在操作上类似常规 reader,但会将字典映射到输出行。

代码语言:javascript
复制
# 对从系统中导出来的文件按照“局数据”中的分公司进行分割
# 这些文件有一个共同的特性,都有“局数据”字段,但分公司不完全都有数据
# 部分文件缺乏“局数据”字段
# 举例
# xxx.csv  ->xxx_广州分公司.csv,xxx_上海分公司.csv
# yyy.csv  ->yyy_广州分公司.csv,yyy_武汉分公司.csv
# zzz.csv  ->zzz_广州分公司.csv,zzz_上海分公司.csv,yyy_武汉分公司.csv,yyy_天津分公司.csv
# 表格中部分数据为null值,需要单独写入一个文件
import csv
import os
import pandas as pd
import codecs
# 获取待转换文件的文件夹路径
curpath = 'C:\\Users\\baoqi\\Documents\\【广州】学习材料\\海南数据治理\\问题数据清单\\'
# 获取当前文件夹下的文件列表
allfile = os.listdir(curpath)
for filename in allfile:
    # 拼接路径及文件
    filesegname = filename.split('.')[0]
    pathfilename = curpath + filename
    # 如果当前为文件夹对象,则跳过
    if os.path.isdir(pathfilename):
        continue
    # 读取csv文件
    xlsdatalist = []  # 暂存当前excel表的数据
    sheettitle = []  # 暂储当前excel表的表头
    orglist=[]  # 存当前表格的地市公司名称
    csv_data = pd.read_csv(pathfilename,encoding='gbk')
    if '地市局(dsj)' in csv_data.columns:
        orglist=list(csv_data['地市局(dsj)'].unique())
        orglist = [a_ for a_ in orglist if a_ == a_]
    else:
        continue
    # 打开当前csv文件,读取数据写入不同list,同时将不规则数据直接写入文件
    with open(pathfilename) as f:
        # 获取数据流
        reader = csv.DictReader(f)
        # 获取字段名称
        sheettitle=reader.fieldnames
        # 拼接相关文件
        csvwritefile = curpath + filesegname + '_.csv'
        # 写入不规则数据文件
        with open(csvwritefile, 'w', newline='') as csvfile:
            # 写入标题
            writer = csv.DictWriter(csvfile, fieldnames=sheettitle)
            writer.writeheader()
            # 读取数据
            for row in reader:
                # 满足分类要求,则写入list,不满足要求直接写入文件
                if row['地市局(dsj)'] !='':
                    xlsdatalist.append([row['地市局(dsj)'],row])
                else:
                    writer.writerow(row)

    for orgname in orglist:
        # 拼接文件名
        csvwritefile = curpath + filesegname + '_' + orgname.replace("'",'') + '.csv'
        with open(csvwritefile, 'w', newline='') as csvfile:
            # 写入标题
            writer = csv.DictWriter(csvfile, fieldnames=sheettitle)
            writer.writeheader()
            # 写入数据
            for data in xlsdatalist:
                # 满足当前分类条件,写入相关数据
                if data[0]==orgname:
                    writer.writerow(data[1])

本文也结合了pandas提取单位的唯一值,且剔除掉了nan值,此外关于csv的标题读写,内容读写的类只是浅尝辄止。涉及字符集编码方面也未做太多说明。有兴趣的可以看一下官网说明。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档