Python的csv文件(csv模块)和ini文件(configparser模块)处理
Python的csv文本文件(csv模块)和ini文本文件(configparser模块)处理
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.csv文件
1>.CSV文件简介
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV是一个被行分隔符,列分隔符划分成行和列的文本文件。
CSV不指定字符编码。
行分隔符为"\r\n",最后一行可以没有换行符。
列分隔符常为逗号或者制表符。
每一行称为一条记录record。
字段可以使用双引号括起来,也可以不使用。如果字段中出现了双引号,逗号,换行符必须使用双引号括起来。如果字段的值是双引号,使用两个双引号表示一个转义。
表头可选,和字段列对其就行了。
2>.EXCEL默认语法
delimiter
列分隔符,默认为逗号(",")
lineterminator
行分隔符,windows默认为"\r\n"
qutechar
字段的引用符号,缺省为双引号.
双引号的处理
doublequote双引号的处理,默认为True。如果碰到数据中有双引号,而quotechar也是双引号,True则使用2个双引号表示,False表示使用转义字符作为双引号的前缀。
escapechar一个转义字符,默认为None。
writer=csv.writer(f,doublequto=Flase,escapechar='@')遇到双引号,则必须提供转义字符
qutoing指定双引号的规则
QUOTE_ALL所有字段
QUOTE_MINIMAL特殊字符字段,Excel方言使用该规则
QUOTE_NONNUMERIC非数字字段
QUOTE_NONE都不使用引号。
3>.手动生成CSV文件
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 from pathlib import Path 7 8 file_path = Path(r"E:\temp\test\test.csv") 9 10 parent = file_path.parent 11 12 if not parent.exists(): 13 parent.mkdir(parents=True) 14 15 csv_body="""\ 16 id,name,age,comment 17 1,jason,19,"I'm 19" 18 2,Tom,20,"this is a ""test"" string." 19 3,YinZhengjie,23,"尹正杰到此一游!" 20 """ 21 22 file_path.write_text(csv_body)
4>.Python中的CSV模块使用案例
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 import csv 7 from pathlib import Path 8 9 file_path = Path(r"E:\temp\test\test.csv") 10 11 with open(str(file_path)) as f: 12 """ 13 csv的reader函数返回一个reader对象,它是一个迭代器。 14 """ 15 reader = csv.reader(f) 16 print(next(reader)) 17 print(next(reader)) 18 for line in reader: 19 print(line) 20 21 22 #说明row行,需要一个可迭代对象就可以,可迭代的每一个元素,将作为csv行的每一个元素。 23 rows = [ 24 [4,"jerry",22,"jerry"], 25 [5,"hdfs",16,"Hadoop"], 26 [(1,),(2,)], 27 "这是字符串" 28 ] 29 30 row = rows[0] 31 32 """ 33 windows下会在每行末尾多出一个"\r",解决办法就是: newline="" 34 """ 35 with open(str(file_path),"a",newline="") as f: 36 """ 37 csv的writer函数返回的是一个DictWrite的实例。 38 主要方法有writerow和writerows,但需要注意我们在使用该方法时需要对文件有相应的处理权限哟~ 39 """ 40 writer =csv.writer(f) 41 writer.writerow(row) 42 writer.writerows(rows)
二.ini文件
1>.ini文件格式说明
作为配置文件,ini文件格式的很流行。比如我们非常熟悉的MySQL数据库的配置文件就是使用更多这种文件格式。接下来我们来看一组案例。
[DEFAULT]
a = test
[mysql]
default-charcter-set = utf8
[mysqld]
datadir = /dbserver/data
port = 33060
character-set-server = utf8
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
接下来我们对上面一段ini格式的文件进行一个简单说明:
中括号里面的部分称为section,译作为节,区,段。
每一个section内,都是key=value形成的键值对,key称为option选项。
注意,这里的DEFAULT是缺省的section的名字,必须大写。
2>.Python中的ConfigParser模块使用案例
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 from configparser import ConfigParser 7 8 filename = "test.ini" 9 newfilename = "mysql.ini" 10 11 cfg = ConfigParser() 12 """ 13 方法签名为: 14 def read(self, filenames, encoding=None) 15 读取ini文件,可以是单个文件,也可以是文件列表。可以指定文件编码。通过查看源码发现返回的是需要读取的文件列表。 16 """ 17 read_ok = cfg.read(filename,encoding="utf8") 18 print(read_ok) 19 20 print(cfg.sections()) #返回section列表,缺省section不包括在内。 21 print(cfg.has_section("client")) #判断section是否存在 22 23 24 for k,v in cfg.items(): #这里没有指定section,则返回所有section名字及其对象 25 print(k,type(k)) 26 print(v,type(v)) 27 print(cfg.items(k)) #咱们这里指定了section名称,则返回这个指定section的键值对组成的二元组。 28 print() 29 30 print("*" * 20 + "我是分隔符" + "*" * 20) 31 32 tmp = cfg.get("mysqld","port") #从指定的段的选项取值,如果找到就返回,如果没有找到就去DEFAULT段找 33 print(type(tmp),tmp) 34 tmp = cfg.get("mysqld","yinzhengjie",fallback="python") #如果没有找到我们可以让他返回特定的字符串。 35 print(type(tmp),tmp) 36 tmp = cfg.getint("mysqld","port") #和get方法类似,只不过它返回指定数据类型。 37 print(type(tmp),tmp) 38 39 if cfg.has_section("test"): #判断是否存在"test"这个section 40 cfg.remove_option("test") #移除"test"这个section,当然我们还可以在后面加一个参数,用来移除"test"下的某个option。 41 42 43 cfg.add_section("students") #添加一个students的section名称,下面就是为该section设置option属性 44 cfg.set("students","name","yinzhengjie") 45 cfg.set("students","age","18") 46 cfg.set("students","habby","LOL") 47 48 with open(newfilename,"w") as f: # 49 cfg.write(f)
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/11144150.html,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。