• 用Python操纵文件(自动化脚本的第一步)


    用Python操纵文件(自动化脚本的第一步)

    @(Python相关)

    os模块相关

    路径的跨平台(解决windows系统和Unix系统正反斜杠的问题)

    import os
    spam_path = os.path.join('usr','bin','spam')
    

    控制工作目录

    获取当前工作目录
    cwd_path = os.getcwd()
    
    更换当前工作目录
    os.chdir(new_cwd_path)
    

    创建新文件夹

    os.makedirs(os.path.join(os.getcwd(),newdir,subdir))
    

    此函数会沿着指定的路径连续创建不存在的文件夹,以确保路径的完整性

    绝对路径与相对路径

    检查给定路径是否是绝对路径
    os.path.isabs(path)
    
    将相对路径转化为绝对路径
    abs_path = os.path.abspath(relative_path)
    

    提取两个路径之间的相对路径(从start到end)

    rel_path = os.path.relpath(end,start)
    

    分离提取文件的绝对路径里的文件夹路径与文件名

    dir_path = os.path.dirname(path)
    file_name = os.path.basename(path)
    dir_path, file_name = os.path.split(path)
    
    若要逐级分离(当作字符串处理)
    path_string.split(os.path.sep)
    """
    此种用法在windows上第一个是磁盘的名称
    而在Mac和Linux上第一个是空字符串,因为字符串的第一个字符就是分隔符~
    """
    os.getcwd() -> '/mnt/lvm/dingning/datasets/coco'
    os.getcwd().split(os.path.sep) -> ['', 'mnt', 'lvm', 'dingning', 'datasets', 'coco']
    

    查看文件大小和文件夹内容

    查看指定路径下的文件的大小(返回对应文件的字节数)
    os.path.getsize(file_path)
    
    查看指定文件夹路径对应的文件夹中的文件名称(返回文件名列表)
    os.listdir(dir_path)
    

    检查文件有效性

    检查path对应的文件或文件夹是否存在(返回布尔变量)
    os.path.exists(path)
    
    检查file_path对应的文件路径是否存在,并且是否是一个文件(返回布尔变量)
    os.path.isfile(file_path)
    
    检查dir_path对应的文件夹路径是否存在,并且是一个文件夹(返回布尔变量)
    os.path.isdir(dir_path)
    

    遍历目录树 os.walk()

    传入一个文件夹路径,在每次迭代时返回三个值:
    • 当前文件夹名称的字符串
    • 当前文件夹中子文件夹的字符串列表
    • 当前文件夹中问价的字符串列表
    import os
    for folderName, subfolders, filenames in os.walk(fold_path):
    	print 'the current folder is ' + folderName
    	
    	for subfolder in subfolders:
    		print 'something'
    	for filename in filenames:
    		print 'something'
    

    File对象相关

    文件读写

    三个步骤:
    • 针对指定文件路径字符串调用open()返回一个File对象
    • 调用File对象的read() write()方法
    • 调用File对象的close()方法,关闭文件
    • 一般使用with ... as ... :方式使用文件
    读取文件内容:
    • read() 将整个文件读取为一个字符串
    • readlines() 将文本的每一行读取为一个字符串,返回整个文件所有行字符串对应的列表
    写入文件(只有一个write()方法):
    • 'w'方式打开文件,若该文件不存在,则创建,若存在,则覆盖
    • 'a'方式打开文件,若该文件不存在,则创建,若存在,则在文件内容的最后开始追加写入
    • write()不会自动加入 ,所以写入文件的时候如果需要换行,则需要自己添加换行分隔符

    shelve模块保存Python变量(将Python变量保存到二进制shelf文件中)

    import shelve
    shelfFile = shelve.open('mydata')
    cats = ['a','b','c']
    shelfFile['cats'] = cats
    shelfFile.close()
    
    shelve文件就像一个列表,对每一个变量都可以取一个名字作为key,然后其内容则为value
    list(shelfFile.keys()) -> ['cats']
    list(shelfFile.values()) -> [['a','b','c']] """注意此处是一个列表,里面第一个元素正好是一个列表对象"""
    

    pprint 模块--漂亮打印

    • pprint.pprint()将列表和字典漂亮打印到屏幕
    • pprint.pformat()将上述要打印到屏幕的文本以字符串的方式返回,利用此可以简单用程序编写python脚本
    import pprint
    cats = ['a','b','c']
    fileObj = open('myCats.py','w')
    fileObj.write('cats = ' + pprint.pformat(cats) + '
    ')
    fileObj.close()
    
    在另一个python脚本中可以这样使用(用Python程序编写更加庞大的Python程序的基础)
    from myCats import cats
    print cats -> ['a','b','c']
    

    shutil模块相关(shell utilize)(复制,移动,改名,删除)

    复制文件和文件夹

    shutil.copy(source, destination)source处文件复制到destination
    • destination如果是文件夹,则新文件名称与原始文件名称保持一致
    • destination如果是文件名,则以此文件名作为复制后的文件名复制
    shutil.copytree(source, destination)source处文件夹复制到destination
    • 此时,sourcedestination都必须是文件夹的路径

    文件夹的移动和改名 shutil.move(source, destination) 使用需谨慎~

    • destination指定的是文件夹,则必须判定该文件夹是否存在,否则会将路径当作是文件名重命名
    • 若其存在,则将文件移动到该文件夹下
    • destination指定的是文件名,若沿途的文件夹均存在,则移动到对应路径下,否则会抛出异常

    删除文件 使用需谨慎

    • os.unlink(file_path) 必须存在且为文件路径,而不是文件夹路径
    • os.rmdir(dir_path) 必须存在且为文件夹路径,而且必须为空文件夹
    • shutil.rmtree(dir_path) 必须存在且为文件夹路径,不必为空文件夹
    • 使用时最好在此代码前面加入print将即将被删除的文件打印出来,提供给用户最终决定权

    zipfile模块相关 处理zip压缩文件

    基本框架

    import os
    import zipfile
    zipObj = zipfile.ZipFile(file_path)   -> '生成一个ZipFile对象'
    zipObj.namelist() -> '打印zip文件目录树,返回一个list'   -> '子方法,返回zip文件的目录list'
    spamInfo = zipObj.getinfo('spam.txt') -> 将list中的一个文件名传入子方法getinfo中,可以返回一个ZipInfo对象
    

    ZinInfo对象则保存zip文件每个子文件的有用的信息,如:

    spamInfo.file_size
    spamInfo.compress_size
    

    解压缩 (ZipFile对象的子方法)

    • extract():第一个参数为zip文件中的子文件名,如namelist()中的一个文件名,第二个参数为目标文件夹路径
    • extractall():无参数则解压全部文件到本地,也可以传递一个文件夹路径,在指定文件夹下解压缩
    如果指定文件夹不存在,则创建

    创建和添加ZIP文件

    import zipfile
    newZip = zipfile.ZipFile('new.zip','w') '此处可以用追加方式,只需将w改为a'
    newZip.write(file_path, compress_type=zipfile.ZIP_DEFLATED) '指定压缩算法'
    newZip.close()
    
  • 相关阅读:
    c/c++本地时间获取
    c++为什么要面向对象?
    设置c++中cout输出的字体颜色
    c++11并行、并发与多线程编程
    奇怪吸引子---RayleighBenard
    奇怪吸引子---QiChen
    奇怪吸引子---Qi
    奇怪吸引子---NoseHoover
    奇怪吸引子---NewtonLeipnik
    奇怪吸引子---LuChen
  • 原文地址:https://www.cnblogs.com/dn-harris/p/6341426.html
Copyright © 2020-2023  润新知