zoukankan      html  css  js  c++  java
  • chapter6.3、shutil模块的使用,csv,ini,及configparser模块

    os模块

    os.name  

      返回操作系统平台,windows下是nt,Linux下数是posix

    os,uname,Windows下不支持uname,Linux下返回posix.uname_result(sysname='Linux', nodename='centos', release='2.6.32-696.el6.x86_64', version='#1 SMP Tue Mar 21 19:29:05 UTC 2017', machine='x86_64')

    sys.platform windows返回win32,linux返回linux

    os.listdir ,立即返会一个目录内内容的列表

    python3中鼓励使用生成器

    os调用底层函数,建议使用内建函数open、read、write

    os.stat(),本质调用系统功能,linux下的stat,显示文件的元信息

    os.chmod,改变权限,改变权限需要权限,改权限谨慎,删文件谨慎。

    linux系统操作掌握,可以看视屏学学习

    shutil 高级文件操作

    文件拷贝时拷贝内容,但是会丢失stat数据信息,权限等,python提供了库shutil 

    shutil.copy  复制file和mode

    shutil.copyfileobj(fsrc,fdst[,length])  文件对象的复制,不复制fsrc和fdst是open的打开的文件对象,复制内容,fdsr要求可写,length指定buffer的大小。

    shutil.copyfile(src,dst,*,follow_symlinks=True) 复制文件内容,参数是字符类型,不含元数据,本质上就是调用copyfileobj ,所以不带元数据,二进制复制内容,比较文件的存在,和软链接判断,类型判断,follow_symlinks=True 判断软链接,True表示追进

    shutil.copymode(src,dst,*,follow_symlinks=True),复制权限。

    shutil.copy2  拷贝文件文件的stat,mode,file,参数是字符串表示的路径

    shutil.copystat         拷贝stat信息,时间信息

    shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)

     拷贝结构树,要注意是递归复制,目标文件不能存在,ignore后是一个函数,例如

    def ingnore(src,names):
        ignoreanmes = set()
        for name in names:
            if name.endswith('.py'):
                ignoreanmes.add(name)
        return ignoreanmes
    shutil.copytree('/tmp/b','/tmp/a',ignore=ingnore)

    表示忽略以a开头的文件,

    shutil.rmtree(path, ignore_errors=False, onerror=None) 递归删除,和rm-rf 一样危险,慎用,不是原子操作,删除错误时,会中断,删除的无法还原

    ignore_errors=False  表示忽略错误,为False或omitted时onerror生效,onerror为callable,接受函数function,path,execinfo

    shutil.move(src, dst, copy_function=copy2),递归移动文件和目录到目标,本身使用的是os.rename 的方法,如果不能rename,就调用copytree后删除源目录,没有确认复制完成时,不会删除源。默认使用copy2的方法。Windows下,相同盘符下改目录,不同盘符下,先复制再删除,错误时不删除源文件。

    shutil还有打包功能,生成tar并压缩,支持zip、gz、bz、xz。

    rar闭源的,压缩时使用zip压缩,zip是开源的。

    csv文件,逗号分割值的文本文件,Comma-Separated Values。

    文档位置 :http://www.ietf.org/rfc/rfc4180.txt

    行列分割符分成行和列的文本文件,csv不指定编码列分割符常用,或制表符,行用

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

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

    import csv   导入csv模块,

    csv.reader(iterable [, dialect='excel'][optional keyword args])  返回一个行迭代器

    dialect,方言:默认使用excel方言,如下:
      delimiter 列分隔符,逗号
      lineterminator 行分隔符
      quotechar 字段的引用符号,缺省为" 双引号

      双引号的处理

        doublequote 双引号的处理,默认为True。如果碰到数据中有双引号,而quotechar也是双引号,True则使用2个双引号表示,False表示使用转义字符将作为双引号的前缀

        escapechar 一个转义字符,默认为None,不给抛异常
        writer = csv.writer(f, doublequote=False, escapechar='@') 遇到双引号,则必须提供转义字符,此处转为@符号,如果使用转义字符,要再加一个反斜杠。
      quoting 指定双引号的规则
        QUOTE_ALL 所有字段
        QUOTE_MINIMAL特殊字符字段,Excel方言使用该规则
        QUOTE_NONNUMERIC非数字字段,加双引号
        QUOTE_NONE都不使用引号。最好少用,无法对齐

    excel还有一种excel_tab 方言,使用tab作为列分割符。

    csv_read =  reader(iterable [, dialect='excel'][optional keyword args])
    
    for x in csv_reader:
    
      print(x)

    csv_writer = csv.writer(fileobj  [, dialect='excel'] [optional keyword args])  返回DictWriter的实例

    csv_writer.writerows(rows)

    writerow,迭代每一行,用逗号分割,有歧义加引号

    writerows,迭代写入表格,行尾使用 分割,windows下在每行末尾加 ,使用newline=‘’解决。

    ini 文件

    配置文件,

    中括号里面的部分称为section:节,区,段 

    每个section中都是kv对

    配置文件都是文本文件,文件内都是字符类型,没有其他类型

    python中要求kv对都在section中,python要求必须有第一行的缺省值

    DEFAULT是缺省section的名字,必须大写,其他section没有时,default值顶上。

    可以理解为嵌套字典,可以将section当做key,section存储着键值对组成的字典,可以把ini配置文件当做一个嵌套的字典。默认使用的是有序字典。

     configparser模块

    configparser模块的ConfigParser类就是用来操作。

    可以将section当做key,section存储着键值对组成的字典,可以把ini配置文件当做一个嵌套的字典。默认使用的
    是有序字典。
    read(filenames, encoding=None)读取ini文件,可以是单个文件,也可以是文件列表。可以指定文件编码。
    sections() 返回section列表。缺省section不包括在内。
    add_section(section_name) 增加一个section。
    has_section(section_name) 判断section是否存在
    options(section) 返回section的所有option,会追加缺省section的option
    has_option(section, option) 判断section是否存在这个option
    get(section, option, *, raw=False, vars=None[, fallback])从指定的段的选项上取值,如果找到返回,如果没有找到就去找DEFAULT段有没有。

    getint(section, option, *, raw=False, vars=None[, fallback])
    getfloat(section, option, *, raw=False, vars=None[, fallback])
    getboolean(section, option, *, raw=False, vars=None[, fallback])
    上面3个方法和get一样,返回指定类型数据。
    items(raw=False, vars=None) 返回ini文件的section和sections的内容的kv对
    items(section, raw=False, vars=None)没有section,则返回所有section名字及其对象;如果指定section,则返回这个指定的section的键值对组成二元组。
    set(section, option, value)
    section存在的情况下,写入option=value,要求option、value必须是字符串。
    remove_section(section)移除section及其所有option
    remove_option(section, option)移除section下的option。
    write(fileobject, space_around_delimiters=True)将当前config的所有内容写入fileobject中,一般open函数使用w模式。

  • 相关阅读:
    11.查询截取分析_慢查询日志
    10.查询截取分析_查询优化
    8.索引优化
    7.使用EXPLAIN 来分析SQL和表结构_2
    7.使用EXPLAIN 来分析SQL和表结构_1
    6.B+Tree 检索原理
    5.索引简介
    创建集合搜索帮助
    介绍SAP预留函数创建搜索帮助
    通过出口函数创建搜索帮助
  • 原文地址:https://www.cnblogs.com/rprp789/p/9589189.html
Copyright © 2011-2022 走看看