python的csv文件读取

csv文件读取

  1. csv

    csv文件(Comma-Separated Values)是一种以逗号作为分隔符(当然也可以以其他字符作为分隔符)、以行为数据单位的纯文本数据文件.

    如果发现中文是乱码,那是因为data.csv文件的编码格式是utf-8而不是GBK,转为GBK即可在Excel中正常显示中文。

  2. 写入csv

    数据格式

     data=[
     	{'link_href': '/html/yzgdgs/col566/2019-05/23/20190523090027164493217_1.html', 'link_date': '2019-05-23'},
     	{'link_href': '/html/yzgdgs/col566/2019-05/22/20190522084617632881162_1.html', 'link_date': '2019-05-22'}
     	]
    

    写入文件

     def save_csv(data):
         import csv
     
     	
         with open('links_csv.csv', 'w+') as fp:
             # 获取表头列名列表
             headers = data and list(data[0].keys())
             writer = csv.DictWriter(fp, fieldnames=headers)
             # 写入表头
             writer.writeheader()
             # 写入数据行
             writer.writerows(data)
    
  3. 读取数据

     # 读写csv文件
     import csv
     import sys
     from collections import OrderedDict
     import json
     reload(sys)
     sys.setdefaultencoding('utf-8')
     
     def read_csv2dicts(csv_file_path, field_names = None):
         '''
         读取csv文件数据到到字典列表中,支持指定特定的列、指定特定的列顺序读取
         :param csv_file_path: csv文件路径
         :param field_names: 指定的列名列表
         '''
         with open(csv_file_path,'r') as csv_file:
             # 读取csv文件表头列名列表
             header_line = csv_file.readlines()[0]
             headers = header_line.strip().split(',')
         
         # 用二进制格式读取csv文件
         with open(csv_file_path,'rb') as csv_file:
             # 用csv文件对象构建reader对象,reader对象可以看作是多个字典的列表(每行一个字典)
             reader = csv.DictReader(csv_file)
             
             # 行数据列表(每行数据为一个有序字典)
             datas = []
             for row_dict in reader:
                 # 行数据JSON字符串
                 row_json_str = ''
                 # 使用有序字典,保持指定的列顺序
                 ordered_row_dict = OrderedDict()
                 # 根据指定的列名列表过滤
                 if field_names:
                     # 把原始行数据字典row_dict中的每个字段的数据按照field_names列表的顺序存入ordered_row_dict字典
                     for field in field_names:
                         ordered_row_dict[field] = row_dict[field]
                     # 因为csv模块只能正常处理ASCII字符,为了正常处理中文,这里还需要做个utf-8编码转换
                     row_json_str = json.dumps(ordered_row_dict).encode('utf-8')
                 # 不指定列名的情况,使用csv文件原有表头的列顺序
                 else:
                     # 指定顺序为原有表头顺序(注:如果不这样处理,csv会自动按照key的字典序进行排序)
                     for field in headers:
                         ordered_row_dict[field] = row_dict[field]
                     # 因为csv模块只能正常处理ASCII字符,为了正常处理中文,这里还需要做个utf-8编码转换
                     row_json_str = json.dumps(ordered_row_dict).encode('utf-8')
                 # 把当前行的数据字典对象添加到datas列表,字典保持原有顺序
                 datas.append(json.loads(row_json_str,object_pairs_hook = OrderedDict))
             return datas
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值