python-csv文件读取

作者: 詹亮的小仓库 | 来源:发表于2020-03-11 18:10 被阅读0次

    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. 读取数据

       # coding:utf-8
       # 读写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

    相关文章

      网友评论

        本文标题:python-csv文件读取

        本文链接:https://www.haomeiwen.com/subject/otshjhtx.html