Python的csv文件(csv模块)和ini文件(configparser模块)处理

        Python的csv文本文件(csv模块)和ini文本文件(configparser模块)处理

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.csv文件

1>.CSV文件简介

  逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
  
  CSV是一个被行分隔符,列分隔符划分成行和列的文本文件。

  CSV不指定字符编码。

  行分隔符为" ",最后一行可以没有换行符。

  列分隔符常为逗号或者制表符。

  每一行称为一条记录record。

  字段可以使用双引号括起来,也可以不使用。如果字段中出现了双引号,逗号,换行符必须使用双引号括起来。如果字段的值是双引号,使用两个双引号表示一个转义。

  表头可选,和字段列对其就行了。

2>.EXCEL默认语法

delimiter
  列分隔符,默认为逗号(",")
lineterminator
  行分隔符,windows默认为" " 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:	emp	est	est.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:	emp	est	est.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下会在每行末尾多出一个"
",解决办法就是: 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