myblou

CSV 文件(Comma Separated Values file,即逗号分隔值文件)是一种纯文本文件,它使用特定的结构来排列表格数据。因为是纯文本文件,所以 csv 只包含实际的文本数据 —— 换句话说,csv 可以包含可打印的 ASCII 或 Unicode 字符。那在python中对CSV文件要怎么进行操作呢?

 

首先要先准备一个CSV文件,创建一个excel文件,并另存为csv文件,放入几行数据,我准备里面的内容是:

 

 

 

一、导入CSV包

import csv

 

二、CSV文件基本读取

def read_csv():
    with open(\'file.csv\',\'r\') as f:
        rete = csv.reader(f)        # 读取后返回的是一个_csv.reader的对象,如果通过遍历,可以看到是一个个列表
        for x in rete:
            print(x)

运行结果:

[\'编号\', \'课程\', \'讲师\']
[\'1\', \'Python\', \'Tom\']
[\'2\', \'C#\', \'Jesee\']
[\'3\', \'Django\', \'Nike\']
[\'4\', \'.Net\', \'Kangkang\']

 

通过以上方法,就读取出CSV文件里面的内容。

 

三、读取CSV文件并用namedtuple映射列名

def read_namedtuple():
    with open(\'file.csv\',\'r\') as f:
        red = csv.reader(f)     # 读取后返回的是一个_csv.reader的对象,如果通过遍历,可以看到是一个列表
        head = next(red)        # 要把第一行给分隔开,不然会当成数据一起打印了
        ow = namedtuple(\'Row\',head)
        # 用nmaedtuple来定义的,它的对象名称就叫Row,后面列表给它的数据就是最终这个对象的值,而head里面的表头就当作是Row对象值的名称
        for x in red:
            row = ow(*x)        # *r就是对遍历到的r进行解包,然后传递给Row,它会将每一列对应到Row对象值的名称下面
            print(row)

运行结果:

Row(编号=\'1\', 课程=\'Python\', 讲师=\'Tom\')
Row(编号=\'2\', 课程=\'C#\', 讲师=\'Jesee\')
Row(编号=\'3\', 课程=\'Django\', 讲师=\'Nike\')
Row(编号=\'4\', 课程=\'.Net\', 讲师=\'Kangkang\')

 

 

四、读取CSV文件并以字典的形式映射

def read_dict():
    \'\'\'读取csv并以字典的形式映射\'\'\'
    with open(\'score.csv\',\'r\') as f:
        red = csv.DictReader(f)     # 通过csv自带的DictReader方法将数据转换成字典表
        for x in red:
            print(x)              # 遍历出来每个x都是一个字典表

运行结果:

{\'编号\': \'1\', \'课程\': \'Python\', \'讲师\': \'Tom\'}
{\'编号\': \'2\', \'课程\': \'C#\', \'讲师\': \'Jesee\'}
{\'编号\': \'3\', \'课程\': \'Django\', \'讲师\': \'Nike\'}
{\'编号\': \'4\', \'课程\': \'.Net\', \'讲师\': \'Kangkang\'}

 

 

五、写入CSV文件

写入单行内容到CSV文件

def write_csv(s,q):
    with open(\'file.csv\',\'a\',newline=\'\') as f:     # newline=空是因为我们文件是csv类型,如果不加这个东西,当我们写入东西的时候,就会出现空行
        xieru = csv.writer(f,dialect=\'excel\')       # 定义一个变量进行写入,将刚才的文件变量传进来,dialect就是定义一下文件的类型,我们定义为excel类型
        xieru.writerow(s)       # 写入的方法是writerow,通过写入模式对象,调用方法进行写入
        xieru.writerow(q)
        print(\'写入完成\')

s = [5, \'Java\', \'Mark\']
q = [6, \'C++\', \'William\']
write_csv(s,q)

运行结果:

写入完成

 

写入多行内容到CSV文件

def write_csv(s):
    with open(\'file.csv\',\'a\',newline=\'\') as f:
        xieru = csv.writer(f,dialect=\'excel\')
        xieru.writerows(s)       # writerows方法是一下子写入多行内容
        print(\'写入完成\')

e = [(7,\'PHP\',\'Jones\'),(8,\'HTTP\',\'Brown\')]
write_csv(e)

运行结果:

写入完成

 

六、以字典表的形式写入CSV文件

def write_dict(q):
    biao = [\'编号\',\'课程\',\'讲师\']
    with open(\'file.csv\', \'a\', newline=\'\') as f:
        xieru = csv.DictWriter(f,biao)
        xieru.writerows(q)  # writerows方法是一下子写入多行内容
        print(\'写入完成\')

u = [
    {\'编号\': 9, \'课程\': \'SQL\', \'讲师\': \'Miller\'},
    {\'编号\': 10, \'课程\': \'MySQL\', \'讲师\': \'Davis\'}
]
write_dict(u)

运行结果:

写入完成

 

这就Python对CSV文件的读取与写入,你看懂了吗?如果没看懂,欢迎留言交流哦!

 
 
本文转自:https://www.myblou.com/archives/1466

分类:

技术点:

相关文章: