python读写csv文件
Posted Sakura
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python读写csv文件相关的知识,希望对你有一定的参考价值。
csv释义
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。
读取csv文件
reader(filename),可以使用reader()方法来创建一个对象从csv文件中读取数据。
官方文档:csv.reader(csvfile, dialect=\'excel\', **fmtparams) //csvfile是任何可以迭代的对象(如果是文件对象则用newline=\'\'来打开它),dialect翻译为方言用于定制解析器来解析数据,**fmtparams为解析器参数
读文件时,输入数据的每一行都会解析,并返回一个列表
创建一个csv文件写入如下数据,python读取:
>>> with open(\'test.csv\',\'r\',newline=\'\') as csvfile: ... reader = csv.reader(csvfile)>>> for i in reader: ... print(i) ... [\'name\', \'tel\', \'address\', \'age\'] [\'zhang\', \'15111111111\', \'beijing\', \'33\'] [\'li\', \'13822222222\', \'wuhan\', \'28\'] [\'liu\', \'15933333333\', \'hainan\', \'25\']
写csv文件
writer(filename),使用writer方法来写数据
csv.writer(csvfile, dialect=\'excel\', **fmtparams) //参数与读完全基本相同
写一段代码来测试
import csv with open(\'test1.csv\',\'w\',newline=\'\') as f: writer = csv.writer(f) writer.writerow((\'name\', \'tel\', \'address\', \'age\')) writer.writerow((\'zhang\', 15111111111, \'beijing\', 33)) writer.writerow((\'li\', 13822222222, \'wuhan\', 28)) writer.writerow((\'liu\', 15933333333, \'hainan\', 25)) with open(\'test1.csv\',\'r\',newline=\'\') as f: reader = csv.reader(f) for i in reader: print(i)
结果:
[\'name\', \'tel\', \'address\', \'age\']
[\'zhang\', \'15111111111\', \'beijing\', \'33\']
[\'li\', \'13822222222\', \'wuhan\', \'28\']
[\'liu\', \'15933333333\', \'hainan\', \'25\']
发现结果与输入不同,默认引号模式的原因
写文件时可用quoting来设置引号模式
默认为:writer = csv.writer(f,quoting=csv.QUOTE_NONNUMERIC) //非数字加引号
可改为:
QUOTE_ALL:所有字段加引号
QUOTE_MINIMAL:特殊字段加引号
QUOTE_NONE:都不加引号
方言
用于定制解析器,无需将各个参数单独传入阅读器和书写器,可以组成一起构成一个方言对象
标准库包括两个方言:excel和excel-tabs,默认为excel
csv方言参数:
属性 | 默认值 | 含义 |
delimiter | , | 字段分隔符 |
doublequote | True | 控制quotechar实例是否成对 |
escapechar | None | 指示一个转义序列 |
lineterminator | \\r\\n | 书写器使用这个结束一行 |
quotechar | " | 用来包围含特殊字符的字段 |
quoting | QUOTE_MINIMAL | 控制引号行为 |
skipinitialspace | False | 忽略字符定界符前的空白符 |
将”行“转换为字典
DictReader和DictWriter类将行转化为字典而非行
官方文档:class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect=\'excel\', *args, **kwds)
参数说明:
fieldnames:字典的键,默认为第一行数据
restkey:若所读行字段多余给出的键个数,剩余键由restkey给出
restkey:若所读行字段少于给出的键个数,剩余值由restval给出
例如上述test1.csv文件
with open(\'test1.csv\',\'r\',newline=\'\') as f: reader = csv.DictReader(f) for i in reader: print(i)
结果:
{\'address\': \'beijing\', \'name\': \'zhang\', \'age\': \'33\', \'tel\': \'15111111111\'}
{\'address\': \'wuhan\', \'name\': \'li\', \'age\': \'28\', \'tel\': \'13822222222\'}
{\'address\': \'hainan\', \'name\': \'liu\', \'age\': \'25\', \'tel\': \'15933333333\'}
DictWriter类似DictReader,提供一个列表作为键
writer = csv.DictWriter(f,list)
官方文档:class csv.Dictwriter(csvfile, fieldnames, restval=\'\', extrasaction=\'raise\', dialect=\'excel\', *args, **kwds)
更多详细解释可访问python标准库
以上是关于python读写csv文件的主要内容,如果未能解决你的问题,请参考以下文章