• 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)
  • 相关阅读:
    Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现
    Apache ActiveMQ序列化漏洞(CVE-2015-5254)复现
    Jenkins Java 反序列化远程执行代码漏洞(CVE-2017-1000353)
    jenkins未授权访问漏洞
    jenkins弱口令漏洞
    jboss 未授权访问漏洞复现
    jboss反序列化漏洞复现(CVE-2017-7504)
    C++中的强制类型转换
    new/delete与命名空间
    函数默认参数与占位参数
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11144150.html
Copyright © 2020-2023  润新知