目录
读取写入kwargs参数所谓的CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式。
尝试使用CSV格式进行标准化描述之前已经使用了很多年。
(相关资料图)
该csv模块reader和writer对象读取和写入序列。
程序员还可以使用DictReader和DictWriter类以字典形式读取和写入数据。
读取
reader(iterable, dialect=‘excel", *args, **kwargs)
该方法返回一个reader对象,该对象将遍历给定的iterable中的行。默认情况下,从csv文件中读取的每一行都作为字符串列表返回,除非指定了quoting参数值为QUOTE_NONNUMERIC。如下:
假设有这么一个文件a.csv,内容如下:
1,2,3,4
5,6,7,8
9,10,11,12
我们读取一下这个csv
import csv with open("a.csv") as f: reader = csv.reader(f) print(type(reader), reader) for item in reader: print(type(item), item) ############# 打印结果如下 #############<_csv.reader object at 0x000002194D601F50> ["1", "2", "3", "4"] ["5", "6", "7", "8"] ["9", "10", "11", "12"]
当我们设置quoting参数值为QUOTE_NONNUMERIC时:
with open("a.csv") as f: reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) print(type(reader), reader) for item in reader: print(type(item), item) ############# 打印结果如下 #############<_csv.reader object at 0x000002BFC3291F50> [1.0, 2.0, 3.0, 4.0] [5.0, 6.0, 7.0, 8.0] [9.0, 10.0, 11.0, 12.0]
更多参数解释请看下面kwargs参数
DictReader(f, fieldnames=None, restkey=None, restval=None, dialect=“excel”, *args, **kwds)
创建一个DictReader对象,其功能类似于常规读取器,但是将每行的信息映射到OrderDict当中。
OrderDict的键名可由filednames参数指定,如果未指定,那么将由第一行数据作为键名;如果数据中的字段多于字段名列表,则剩余的数据以列表存储起来,其健名由restkey指定(默认为None);如果数据中的值少于字段名列表,则缺少的值将默认填充为restval设定的值(默认为None)。
with open("a.csv") as f: reader = csv.DictReader(f) print(type(reader), reader) for item in reader: print(type(item), item) ############# 打印结果如下 #############OrderedDict([("1", "5"), ("2", "6"), ("3", "7"), ("4", "8")]) OrderedDict([("1", "9"), ("2", "10"), ("3", "11"), ("4", "12")])
设置了fieldnames情况下:
... reader = csv.DictReader(f, fieldnames=["a", "b", "c", "d"]) ... ############# 打印结果如下 #############OrderedDict([("a", "1"), ("b", "2"), ("c", "3"), ("d", "4")]) OrderedDict([("a", "5"), ("b", "6"), ("c", "7"), ("d", "8")]) OrderedDict([("a", "9"), ("b", "10"), ("c", "11"), ("d", "12")])
无论是reader对象还是DictReader对象,都具有如下操作:
__next__()
: 将阅读器可迭代对象的下一行作为列表或字典返回dialect
: 获取阅读器的dialect描述line_num
: 获取阅读器读取的行数fieldnames
: 获取键名(DictReader对象独有)
更多参数解释请看下面kwargs参数
写入
writer(fileobj, dialect=‘excel", *args, **kwargs)
将用户数据写入到指定的文件对象上,返回一个writer对象
import csv # 一定要指定newline="", 否则将会每行数据之间将会有空行 with open("b.csv", mode="w", newline="") as f: writer = csv.writer(f) writer.writerow([1, 2, 3, 4]) writer.writerow([5, 6, 7, 8])
更多参数解释请看下面kwargs参数
DictWriter(f, fieldnames, restval="", extrasaction=“raise”, dialect=“excel”, *args, **kwds)
将用户数据写入到指定文件对象上,但需指定fieldnames(键名),返回一个DictWriter对象。
如果数据中的值少于字段名列表,则缺少的值将默认填充为restval设定的值(默认为None)。
import csv # 一定要指定newline="", 否则将会每行数据之间将会有空行 with open("b.csv", mode="w", newline="") as f: writer = csv.DictWriter(f, fieldnames=["a", "b", "c", "d"]) writer.writerow({"a": 1, "b": 2, "c": 3, "d": 4}) writer.writerow({"a": 5, "b": 6, "c": 7, "d": 8})
值得注意的是,默认情况下fieldnames数据并不会写入到文件当中!
无论是reader对象还是DictReader对象,都具有如下操作:
writerow(rowdict): 将行数据写入到文件对象 writerows(rowdicts): 所有行数据写入到文件对象当中 import csv with open("b.csv", mode="w", newline="") as f: writer = csv.writer(f) writer.writerows([[1, 2, 3, 4], [5, 6, 7, 8]])
dialect
: 获取写入器的dialect描述writeheader()
: 用fieldnames数据写入一行(DictWriter对象独有)
更多参数解释请看下面kwargs参数
kwargs参数
delimiter
一个用于分割字段的分隔符,默认为,
lineterminator
行终止符,默认为\r\n
quoting
控制何时引用应该由作者产生并被读者识别
skipinitialspace
如果设置为True,分割符后面的空白将被忽略。默认为False
""" 假设a.csv的内容如下 1, 2,3,4 """ import csv with open("a.csv") as f: reader = csv.reader(f) # reader = csv.reader(f, skipinitialspace=True) for item in reader: print(type(item), item) ############ 默认情况,打印如下 ############["1", " 2", "3", "4"] ############ skipinitialspace=True,打印如下 ############ ["1", "2", "3", "4"]
strict
如果设置为True,则将csv输入错误时将引发异常。默认为False
更多参数解释以及csv模块的使用,请看:https://docs.python.org/3.7/library/csv.html
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?