Python3基础篇——读写csv文件

csv是一种我们常见的数据处理格式,官方叫逗号分隔值文件格式,其文件以纯文本形式存储表格数据(数字和文本),即必须是字符序列;csv格式文件非常简洁,文件的每一行内容代表Excel表格中一行,逗号分隔了该行中的单元格内容(分隔符也可以不是逗号),但是它没有Excel的宽高设置,没有颜色字体等等的设置,非常适合数据的存储和处理,比如我们可以将爬取的数据用csv的格式存储起来,读取和写入也非常的方便;

import csv        # 导入csv库,这是一个自带库,不需要安装哈

# 创建一个列表,这就是我们需要存储的数据
data = [
    ['0', '3', '6', '9', '12', '15', '18'],
    ['0', '4', '8', '12', '16'],
    ['0', '5', '10', '15'],
    ['0', '6', '12', '18'],
    ['0', '7', '14'],
    ['0', '8', '16'],
    ['0', '9', '18']
]

with open('test.csv','w') as f:    # 文件操作,打开文件,退出即保存
    writer = csv.writer(f)         # 实例化对象,相当于把刚才打开的文件赋予了csv写入的属性
    writer.writerows(data)         # 将数据写入文件

with open('test.csv','r') as f:    # 打开文件
    reader = csv.reader(f)         # 将打开的文件数据以csv格式读入
    for row in reader:             # 遍历返回的数据,将其打印出来
        print(row)

# 输出结果:
# ['0', '3', '6', '9', '12', '15', '18']
# []
# ['0', '4', '8', '12', '16']
# []
# ['0', '5', '10', '15']
# []
# ['0', '6', '12', '18']
# []
# ['0', '7', '14']
# []
# ['0', '8', '16']
# []
# ['0', '9', '18']
# []

 通过上面的例程,我们来分析一下:

  1. 在创建数据的时候使用的是列表,那么写入数据必须是列表格式吗?
    官方给出的是:必须是支持迭代的对象,可以是文件(file)对象或者列表(list)对象,如果我们需要保存一个'12',我们看看会出现什么情况
    import csv
    
    with open('test.csv','w') as f:
        writer = csv.writer(f)
    
        writer.writerows('12')
    
    with open('test.csv','r') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)
    
    # ['1']
    # []
    # ['2']
    # []

    会发现将'12'分开存储了,这是因为字符串也是序列,可以将它理解成一个变形的列表;我们回过来,整个列表就像是一张纸,里面的第一个列表元素就是第一行的内容,再往里面第一个列表元素的第一个元素就是第一行第一列的值了,我们后面保存数据一般就是以列表的形式进行存储;
    上面说了,支持迭代的对象,就是说元组、字典也是可以的,还可以是文件对象;

  2. 我们会发现每一行后面会有一个空行,这是库方法自带加的,就像print('hi',end='\n')是一样的道理,那么有没有什么办法去除呢?
    import csv
    
    with open('test.csv','w',newline='') as f:        # 我们可以在打开文件的时候设置newline='',新的一行就不会有空行了
        writer = csv.writer(f)
    
        writer.writerows('12')
    
    with open('test.csv','r') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)
    
    # ['1']
    # ['2']

     

  3. 我们将读入的文件输出的时候,发现他是以列表格式返回的,就像我们最开始写入的格式一样;

我们上面读写的都是简单的文本,且编码格式是已知的,当我们爬取数据的时候,数据的编码格式就不是那么确定了,这样就会造成兼容的问题,那么这个问题要怎么解决呢?

import csv

data = [
    [u'啊啊啊','dsfad'],
    [u'不不不','gdgdd']
]

with open('test.csv','w',newline='',encoding='utf-8-sig') as f:    #读写的时候都指定编码格式,确保兼容性
    writer = csv.writer(f)

    writer.writerows(data)

with open('test.csv','r',encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# ['啊啊啊', 'dsfad']
# ['不不不', 'gdgdd']

上面说了,分隔符也可以不是逗号,那么我想将分隔符改成 | 该怎么办呢?

import csv

data = [
    [u'啊啊啊','dsfad'],
    [u'不不不','gdgdd']
]

with open('test.csv','w',newline='',encoding='utf-8-sig') as f:
    writer = csv.writer(f,delimiter='|')        # 我们可以在创建对象的时候,修改delimiter这个属性

    writer.writerows(data)

with open('test.csv','r',encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# ['啊啊啊|dsfad']
# ['不不不|gdgdd']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值