csv文件处理

CSV文件处理

import csv

读取csv文件

以列表的形式获取文件信息

with open('data.csv', 'r') as f:
    # reader是一个迭代器
    reader = csv.reader(f)
    for read in reader:
        print(read)
# 获取出来是列表的形式
['用户ID', '客户分类', '区域', '是否省会', '7月销量', '8月销量', '9月销量']
['59224', 'A类', '一线城市', '是', '6', '20', '0']
['55295', 'B类', '三线城市', '否', '37', '27', '35']
['46035', 'A类', '二线城市', '是', '8', '1', '8']
['2459', 'C类', '一线城市', '是', '', '8', '14']
['22179', 'B类', '三线城市', '否', '9', '12', '4']
['22557', 'A类', '二线城市', '是', '42', '20', '55']
with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)
    # next()函数可以获取标题下的所有数据
    for read in reader:
        print(read)
['59224', 'A类', '一线城市', '是', '6', '20', '0']
['55295', 'B类', '三线城市', '否', '37', '27', '35']
['46035', 'A类', '二线城市', '是', '8', '1', '8']
['2459', 'C类', '一线城市', '是', '', '8', '14']
['22179', 'B类', '三线城市', '否', '9', '12', '4']
['22557', 'A类', '二线城市', '是', '42', '20', '55']
# 只获取到我们想要看到的数据,通过操作列表来实现
with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)
    for read in reader:
        ID = read[0]
        area = read[2]
        print({'ID': ID, 'area': area})
        
{'ID': '59224', 'area': '一线城市'}
{'ID': '55295', 'area': '三线城市'}
{'ID': '46035', 'area': '二线城市'}
{'ID': '2459', 'area': '一线城市'}
{'ID': '22179', 'area': '三线城市'}
{'ID': '22557', 'area': '二线城市'}

以字典的方式获取文件信息

with open('data.csv', 'r') as f:
    # 使用DictReader创建的reader对象,不会包含标题那行数据
    # reader是一个迭代器,遍历这个迭代器,返回的是一个字典
    reader = csv.DictReader(f)
    for x in reader:
        print(x)
# 其结果是一个序列化的字典
OrderedDict([('用户ID', '59224'), ('客户分类', 'A类'), ('区域', '一线城市'), ('是否省会', '是'), ('7月销量', '6'), ('8月销量', '20'), ('9月销量', '0')])
OrderedDict([('用户ID', '55295'), ('客户分类', 'B类'), ('区域', '三线城市'), ('是否省会', '否'), ('7月销量', '37'), ('8月销量', '27'), ('9月销量', '35')])
OrderedDict([('用户ID', '46035'), ('客户分类', 'A类'), ('区域', '二线城市'), ('是否省会', '是'), ('7月销量', '8'), ('8月销量', '1'), ('9月销量', '8')])
OrderedDict([('用户ID', '2459'), ('客户分类', 'C类'), ('区域', '一线城市'), ('是否省会', '是'), ('7月销量', ''), ('8月销量', '8'), ('9月销量', '14')])
OrderedDict([('用户ID', '22179'), ('客户分类', 'B类'), ('区域', '三线城市'), ('是否省会', '否'), ('7月销量', '9'), ('8月销量', '12'), ('9月销量', '4')])
OrderedDict([('用户ID', '22557'), ('客户分类', 'A类'), ('区域', '二线城市'), ('是否省会', '是'), ('7月销量', '42'), ('8月销量', '20'), ('9月销量', '55')])
with open('data.csv', 'r') as f:
    reader = csv.DictReader(f)
    for x in reader:
        # 通过key的方式获取值
        # 这种方式不会因为csv文件信息位置的移动而无法读取
        value = {'area': x['区域'], '7': x['7月销量']}
        print(value)
{'area': '一线城市', '7': '6'}
{'area': '三线城市', '7': '37'}
{'area': '二线城市', '7': '8'}
{'area': '一线城市', '7': ''}
{'area': '三线城市', '7': '9'}
{'area': '二线城市', '7': '42'}

写入csv文件

headers = ['username', 'age', 'height']
values = [
    ('张三', 15, 170),
    ('李四', 20, 180),
    ('王五', 25, 190)
         ]
with open('text_1.csv', 'w', encoding='utf-8', newline='') as f:
    # 传入文件指针
    writer = csv.writer(f)
    # 将表头数据写入文件
    writer.writerow(headers)
    writer.writerows(values)
    # writerows直接写入多行数据
    
# 1.文件产生乱码:encoding='utf-8'
# 2.每一行之间都有空白间隔:newline='',使用此参数指定为空字符串

以字典的方式写入文件

headers = ['username', 'age', 'height']
values = [
    {'username': '张三', 'age': 18, 'height': 160},
    {'username': '李四', 'age': 29, 'height': 170},
    {'username': '王五', 'age': 30, 'height': 180}
]
with open('text_2.csv', 'w', encoding='utf-8', newline='') as f:
    # DictWriter()需要两个参数,第一个为文件指针,第二个为头部信息,传入一个列表
    writer = csv.DictWriter(f, headers)
    # 手动将表头信息写入表格,不能省略
    writer.writeheader()
    # 由于我们已经定义好了所有的字典,这里直接用writerow方法,同时写入多行
    # 而writerow方法一次只能写入一行
    writer.writerows(values)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值