python对.csv格式的文件进行I/O常规操作

版权声明:https://blog.csdn.net/qq_43546676 https://blog.csdn.net/qq_43546676/article/details/89087279

python对.csv格式的文件进行I/O常规操作

一、csv简介

CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件,它的使用是比较广泛的(Kaggle上一些题目提供的数据就是csv格式),csv虽然使用广泛,但却没有通用的标准,所以在处理csv格式时常常会碰到麻烦,幸好python内置了csv模块。下面简单介绍csv模块中最常用的一些函数。

二、写文件

1.介绍下writer()函数:

writer(csvfile, dialect='excel', **fmtparams)
参数:csvfile,必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象
		dialect,编码风格,默认为excel的风格,也就是用逗号(,)分隔,dialect方式也支持自定义
		fmtparam,格式化参数,用来覆盖之前dialect对象指定的编码风格。
一般我们只会用带形参csvfile,另外两个参数没有涉及

2.常用的数据写入语法:

import csv

# newline=''用来解决空行的问题
with open('D:\\python\\csv文件操作\\测试.csv', 'w', newline='') as csv_file:
    csv_writer = csv.writer(csv_file)
    head = ['姓名', '班级', '成绩']   # 构造标题信息
    # 构造内容
    rows = [
        ['王豪', '1702', '100'],
        ['李梦', '1702', '90']
    ]
    '''
    rows里面用()也行,但是推荐用上面的
    rows = [
        ('张三', '1702', '100', ''),
        ('李四', '1702', '90')
    ]
    '''
    csv_writer.writerow(head)   # 注意:这里是写入一行
    csv_writer.writerows(rows)  # 注意:这里是写入多行
    print("写入成功!")

3.效果:
在这里插入图片描述


三、读文件

1.介绍下reader()函数:
reader(csvfile, dialect='excel', **fmtparams)
其参数的含义和writer()函数的参数含义一样

2.常用的数据写入语法:

import csv

with open('D:\\python\\csv文件操作\\测试.csv', 'r', newline='') as cvs_file:
    csv_reader = csv.reader(cvs_file)
    # 读取第一行的头信息(标题信息)
    head = next(csv_reader)
    print(head)
    
    for row in csv_reader:
        print(row)
    '''
    也可以直接转为列表
    print(list(csv_reader))
    '''

注意:csv_reader 是一个生成器,是一个惰性的可迭代对象,第一次迭代后,再往后迭代,他不会从头开始,而是从之前第一次迭代完的地方开始,再迭代。所以,我们可以用for循环来迭代,也可以用list来迭代。
这里,我稍微解释一下为什么这里用生成器,因为,如果当数据太大的时候,比如有10G,全读出来内存就炸了,用生成器的好处就是,每次迭代只取一行,这样就比较安全。

3.结果:
在这里插入图片描述
4.如果想读取某一行的信息:

import csv

data = []
with open('D:\\python\\csv文件操作\\测试.csv', 'r', newline='') as cvs_file:
    csv_reader = csv.reader(cvs_file)
    # 读取第一行的头信息(标题信息)
    head = next(csv_reader)
    data = list(csv_reader)
    print(data)
print(data[1])
# 结果:
[['张三', '1702', '100', ''], ['李四', '1702', '90']]
['李四', '1702', '90']

5.使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

import csv

data = []
with open('D:\\python\\csv文件操作\\测试.csv', 'r', newline='') as cvs_file:
    csv_reader = csv.DictReader(cvs_file)
    data = [row for row in csv_reader]
print(data)

# 结果:
[OrderedDict([('姓名', '张三'), ('班级', '1702'), ('成绩', '100'), (None, [''])]), OrderedDict([('姓名', '李四'), ('班级', '1702'), ('成绩', '90')])]

如果要用该方法获取数据列的第一列的成绩:

import csv

data = []
with open('D:\\python\\csv文件操作\\测试.csv', 'r', newline='') as cvs_file:
    csv_reader = csv.DictReader(cvs_file)
    data = [row for row in csv_reader]
print(data[0]['成绩'])

# 结果:
100

猜你喜欢

转载自blog.csdn.net/qq_43546676/article/details/89087279