zoukankan      html  css  js  c++  java
  • 第七章补充 -- 关于文件目录的交互 OS

    # 学会使用 Help dir

    import os

    # dir
    print(dir(os)) # 返回模块中所有的函数

    # help
    print(help(os.getcwd))  #  获取函数使用帮助

    # os.path
    print(dir(os.path))   # 返回模块中所有的函数

    # pathlib

    # 获取当前目录 .
    # 获取上一级目录 ../
    # path.iterdir() -- 遍历当前目录下的所有文件和子目录
    # path.glob("*.txt") -- 获取当前目录及其所有子目录下的指定文件 -- 例如 *.txt

    # pathlib

    import pathlib
    #pathlib.Path(".") -- 获取当前目录
    current_path = pathlib.Path(".")
    print(current_path)

    # pathlib.Path("../") -- 取上一级目录
    up_path = pathlib.Path("../")
    print(up_path)

    # 遍历当前目录下的所有文件和子目录
    iterdir = current_path.iterdir()
    print(type(iterdir))
    for i in iterdir:
    print(i)

    print("-------------------")
    # 获取文件夹下的指定文件
    glob_file = current_path.glob("*.txt")
    for j in glob_file:
    print(j)

    # os.path 常用函数

    # os.path.exists(path) -- 判断 path 对应的文件是否存在,如果存在,返回 True;反之,返回 False

    # os.path.abspath(path) -- 返回 path 的绝对路径
    # os.path.dirname(path) -- 返回 path 路径中的目录部分
    # os.path.basename(path) -- 获取 path 路径的基本名称,即 path 末尾到最后一个斜杠的位置之间的字符串
    # os.path.join(path1[, path2[, ...]]) -- 把目录和文件名合成一个路径
    # os.path.split(path) -- 把路径分割成 dirname 和 basename,返回一个元组


    # os.path.getatime(path) -- 返回 path 所指文件的最近访问时间(浮点型秒数)
    # os.path.getmtime(path) -- 返回文件的最近修改时间(单位为秒)
    # os.path.getctime(path) -- 返回文件的创建时间(单位为秒,自 1970 年 1 月 1 日起(又称 Unix 时间))
    # os.path.getsize(path) -- 返回文件大小,如果文件不存在就返回错误

    # os.path.isfile(path) -- 判断路径是否为文件
    # os.path.isdir(path) -- 判断路径是否为目录
    # os.path.islink(path) -- 判断路径是否为链接文件(类似 Windows 系统中的快捷方式)

    # os.path 常用函数

    filename = r"TED演讲.txt"

    # path.exists(path) -- 判断 path 对应的文件是否存在,如果存在,返回 True;反之,返回 False
    print(os.path.exists(filename))

    # os.path.abspath(path) -- 返回 path 的绝对路径
    print(os.path.abspath(filename))


    # os.path.dirname(path) -- 返回 path 路径中的目录部分
    print(os.path.dirname(filename)) # 由于是相对路径 ,所有输出为空
    print("---------------")

    file = os.path.abspath(filename)
    print(os.path.dirname(file))
    path1 = os.path.dirname(file)

    # os.path.basename(path) -- 获取 path 路径的基本名称,即 path 末尾到最后一个斜杠的位置之间的字符串

    print(os.path.basename(file))

    path2 = os.path.basename(file)
    print("---------------")

    # os.path.join(path1[, path2[, ...]]) -- 把目录和文件名合成一个路径

    print(os.path.join(path1,path2))

    path3 = os.path.join(path1,path2)

    print("---------------")

    # os.path.split(path) -- 把路径分割成 dirname 和 basename,返回一个元组

    dirname,basename = os.path.split(path3)
    print(dirname)
    print(basename)

    # 获取文件相关的时间与大小属性
    """
    os.path.getatime(path)
    返回 path 所指文件的最近访问时间(浮点型秒数)
    os.path.getmtime(path)
    返回文件的最近修改时间(单位为秒)
    os.path.getctime(path)
    返回文件的创建时间(单位为秒,自 1970 年 1 月 1 日起(又称 Unix 时间))

    os.path.getsize(path)
    返回文件大小,如果文件不存在就返回错误。
    """

    print(os.path.getctime(file)) # C -- creat
    print(os.path.getmtime(file)) # M -- make
    print(os.path.getatime(file)) # A -- access

    print(os.path.getsize(file)) # Size

    # 关于文件,文件夹,链接的判断
    """
    os.path.isfile(path) -- 判断路径是否为文件
    os.path.isdir(path) -- 判断路径是否为目录
    os.path.islink(path) -- 判断路径是否为链接文件(类似 Windows 系统中的快捷方式)
    """

    print(os.path.isfile(file)) # -- isfile

    print(os.path.isdir(file)) # -- isdir

    print(os.path.islink(file)) # -- islink

    # 文件目录操作 os

    # os.getcwd() -- 获取当前目录
    # os.chdir() -- 改变当前目录
    # os.listdir(path) # 获取当前

    # os.mkdir(path [,mode]) -- 创建path对应的目录,其中mode用于指定该目录权限 -- 0o777 可读可写可执行
    # os.mkdirs(path [,mode]) -- 创建path对应的目录,其中mode用于指定该目录权限;最大特点在于其可以递归的创建

    # os.renames(old,new) -- 对文件或目录进行递归命名
    # os.rename(src,dst) -- 重新命名文件或目录,将 src 重命名为 dst

    # os.rmdir(path) -- 删除 path 对应的空目录,若目录非空,则抛出异常
    # os.removedirs(path) -- 递归删除目录
    # os.remove(path) -- 删除对应的文件

    # 文件目录操作 -- 增

    # os.getcwd() -- 获取当前目录
    print(os.getcwd())
    old_filepath = os.getcwd()

    # os.chdir() -- 改变当前目录
    change_file = r"C:Usersduty1Desktop工作研究方向图像分割"
    print(os.chdir(change_file)) # 改变当前工作目录
    print(os.getcwd())

    print("调整回原目录---------------")
    print(os.chdir(old_filepath)) # 改变当前工作目录
    print(os.getcwd())

    # os.listdir(path) # 获取当前

    print(os.listdir(old_filepath)) # 以列表模式返回当前目录下的所有目录和文件


    # os.mkdir(path [,mode]) -- 创建path对应的目录,其中mode用于指定该目录权限 -- 0o777 可读可写可执行

    new_path_1 = r"OS"
    os.mkdir(new_path_1)
    print("finesh---------------")

    # os.mkdirs(path [,mode]) -- 创建path对应的目录,其中mode用于指定该目录权限;最大特点在于其可以递归的创建目录 adc/xyz/wawa
    new_path_2 = r"ABC/xyz/wawa"
    os.makedirs(new_path_2)
    print("finesh---------------finish")

    # 文件目录操作 -- 修改

    # os.rename(src,dst) -- 重新命名文件或目录,将 src 重命名为 dst

    path_src1 = r"OS"
    path_dst1 = r"Clinton"
    os.rename(path_src1,path_dst1)
    print("-------------finish---------------")

    # os.renames(old,new) -- 对文件或目录进行递归命名

    path_src2 = r"ABC/xyz/wawa"
    path_dst2 = r"Pluto"
    os.rename(path_src2,path_dst2)
    print("-------------end---------------")

    # 文件目录操作 -- 删除

    os.rmdir(path_dst1) # 删除 path 对应的空目录


    del_file = r"my_file.txt" # 删除指定文件
    os.remove(del_file)

    os.removedirs(r"ABC/xyz") # 递归删除目录 目录需要为空

    print("finish--------------------------")

    # #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import subprocess
    import os


    # 方法一:os.system()
    # 返回值:返回对应状态码,且状态码只会有0(成功)、1、2。
    # 其它说明:os.system()的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。也就是说os.system()执行返回256即 0×0100,返回码应该是其高位0×01即1。所以要获取它的状态码的话,需要通过>>8移位获取。
    def adb_shell(cmd):
    exit_code = os.system(cmd)
    return exit_code>>8
    # # os.system(cmd)命令会直接把结果输出,所以在不对状态码进行分析处理的情况下,一般直接调用即可
    # os.system(cmd)


    # # 方法二:os.popen()
    # # 返回值:返回脚本命令输出的内容
    # # 其它说明:os.popen()可以实现一个“管道”,从这个命令获取的值可以继续被调用。而os.system不同,它只是调用,调用完后自身退出,执行成功直接返回个0。
    # def adb_shell(cmd):
    # result = os.popen(cmd).read()
    # return result


    # # 方法三:subprocess.Popen()
    # # 返回值:Popen类的构造函数,返回结果为subprocess.Popen对象,脚本命令的执行结果可以通过stdout.read()获取。
    # def adb_shell(cmd):
    # # 执行cmd命令,如果成功,返回(0, 'xxx');如果失败,返回(1, 'xxx')
    # res = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 使用管道
    # result = res.stdout.read() # 获取输出结果
    # res.wait() # 等待命令执行完成
    # res.stdout.close() # 关闭标准输出
    # return result


    # # 方法四:subprocess.getstatusoutput()
    # # 返回值:返回是一个元组,如果成功,返回(0, 'xxx');如果失败,返回(1, 'xxx')
    # def adb_shell(cmd):
    # result = subprocess.getstatusoutput(cmd)
    # return result


    cmd = 'adb shell dumpsys activity | grep "Run #"'
    print(adb_shell(cmd))


    四种方法中,需要根据不同需求来采用对应不同方法。
    1.如果不需要对执行结果内容进行处理的,可以用方法一的os.system(),当然,也可以用其它三种方法。
    2.由于方法一的os.system()会直接将执行结果输出来,不受我们控制。如果不想要把结果直接输出来,则只能采用后面三种方法。
    3.subprocess.getstatusoutput()其实是对subprocess.Popen()的封装,两者的区别是subprocess.getstatusoutput()返回一个带有状态码status和结果output的元组,而subprocess.Popen()则直接返回结果output。

  • 相关阅读:
    《大道至简》第一章读后感,java伪代码形式
    chm文件内容无法显示的问题
    Windows下.py文件右键菜单的增删
    在ArchLinux中安装VMWare Workstation
    笔记本屏幕锁定
    pacman 日志摘要
    数据库事务特性和隔离级别
    数据库范式以及ER图
    《剑指offer》算法题第四天
    《剑指offer》算法题第二天
  • 原文地址:https://www.cnblogs.com/Skypeduty1225/p/13973502.html
Copyright © 2011-2022 走看看