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