python:os模块

2019-01-21  本文已影响0人  rr1990

一、os介绍

os模块主要是对操作执行执行操作,导入方法:import os

二、os.path模块的基本操作

1. 绝对路径
# 获取当前工作环境的绝对路径,不包括文件名
cur_path = os.path.abspath('.')
print(cur_path)         # 结果 F:\PythonWorkSpace\PythonStudy\moduleStudy
# 获取当前工作环境的绝对路径,包括文件名
cur_file_path = os.path.abspath(__file__)
print(cur_file_path)      # 结果:F:\PythonWorkSpace\PythonStudy\moduleStudy\os_operate.py
# 获取当前工作环境上一级的绝对路径
pre_path = os.path.abspath("..")
print(pre_path)         # 结果 F:\PythonWorkSpace\PythonStudy
# 获取绝对路径的绝对路径
path = r'C:\Users\admin'
result = os.path.abspath(path)
print(result)         # 结果 C:\Users\admin
# 获取相对路径的绝对路径
path = './test'
result = os.path.abspath(path)
print(result)       # 结果F:\PythonWorkSpace\PythonStudy\moduleStudy\test
2. 获取路径的文件名、文件的路径
path = r'F:\PythonWorkSpace\PythonStudy\moduleStudy'
file_name = os.path.basename(path)
print(file_name)       # 结果 moduleStudy
file_path = os.path.dirname(path)
print(file_path)       # 结果 F:\PythonWorkSpace\PythonStudy
path = r"F:\PythonWorkSpace\PythonStudy\moduleStudy\os_operate.py"
file_name = os.path.basename(path)
print(file_name)       # 结果 os_operate.py
file_path = os.path.dirname(path)
print(file_path)       # 结果 F:\PythonWorkSpace\PythonStudy\moduleStudy
3.判断路径是否存在
path = r'F:\PythonWorkSpace\PythonStudy'
isExist = os.path.exists(path)
print(isExist)       # 结果 True
path = r'F:\PythonWorkSpace\PythonStudy11'
isExist = os.path.exists(path)
print(isExist)       # 结果 False
4.转化path中的"~" 和 "~user"为用户目录
path = "~"
result = os.path.expanduser(path)
print(result)       # 结果 C:\Users\admin
5. 判断路径是否为文件、文件夹
path = r"F:\PythonWorkSpace\PythonStudy\moduleStudy\os_operate.py"
isfile = os.path.isfile(path)
print(isfile)       # 结果 True
isdir = os.path.isdir(path)
print(isdir)       # 结果 False
path = r'F:\PythonWorkSpace\PythonStudy\moduleStudy'
isfile = os.path.isfile(path)
print(isfile)       # 结果 False
isdir = os.path.isdir(path)
print(isdir)       # 结果 True
6.获取文件的时间
file = r"F:\PythonWorkSpace\PythonStudy\moduleStudy\os_operate.py"
amend_time = os.path.getmtime(path)
print(amend_time)       # 结果 1547634893.3910005
create_time = os.path.getctime(file)
print(create_time)       # 结果 1547623358.1830003
7.获取文件的大小
result = os.path.getsize(file)
print(result)       # 结果 2921
8.合并目录与文件名为路径
path = r"F:\PythonWorkSpace"
file1 = 'PythonStudy'
file_path = os.path.join(path, file1)
print(file_path)        # 结果 F:\PythonWorkSpace\PythonStudy
file2 = 'moduleStudy'
file_path = os.path.join(path, file1, file2)
print(file_path)        # 结果 F:\PythonWorkSpace\PythonStudy\moduleStudy
9.分割路径
path = r'F:\PythonWorkSpace\PythonStudy\moduleStudy'
result = os.path.split(path)
print(result)           # 结果 ('F:\\PythonWorkSpace\\PythonStudy', 'moduleStudy')
result = os.path.splitext(path)
print(result)       # 结果 ('F:\\PythonWorkSpace\\PythonStudy\\moduleStudy', '')

path = r'F:\PythonWorkSpace\PythonStudy\moduleStudy\os_operate.py'
result = os.path.split(path)
print(result)           # 结果 ('F:\\PythonWorkSpace\\PythonStudy\\moduleStudy', 'os_operate.py')
result = os.path.splitext(path)
print(result)       # 结果 ('F:\\PythonWorkSpace\\PythonStudy\\moduleStudy\\os_operate', '.py')
path = r'F:\PythonWorkSpace\PythonStudy\moduleStudy'

三、os模块的基本操作

1. 获取当前工作目录
cur_path = os.getcwd()
print(cur_path)     # 结果 F:\PythonWorkSpace\PythonStudy\moduleStudy
2.获取指定路径下的所有文件名
file_names = os.listdir(cur_path)
print(file_names)       # 结果 ['configparser_operate.py', 'os_operate.py', 'test', '__init__.py']

Eg:获取某个路径下的最新文件

# 获取path路径下的最新文件
def get_new_file(path):
    dir_list = os.listdir(path)
    dir_list.sort(key=lambda fn: os.path.getmtime(path + '\\' + fn))
    new_file = os.path.join(path, dir_list[-1])
    return new_file
print(get_new_file(path=cur_path))
3. 创建一个文件夹和多层文件夹
folder_path = r'D:/test'
if not os.path.exists(folder_path):
    os.mkdir(folder_path)
folder_path = r'D:/first/second'
if not os.path.exists(folder_path):
    os.makedirs(folder_path)
4.删除空目录和多层空目录
# 删除空文件夹
folder_path = r'D:/test'
if not os.listdir(folder_path):
    os.rmdir(folder_path)
# 递归删除空文件夹
folder_path = r'D:/first/second'
if not os.listdir(folder_path):
    os.removedirs(folder_path)
5.删除一个文件
file_path = r'D:/test/1.txt'
if os.path.exists(file_path):
    if os.path.isfile(file_path):
        os.remove(file_path)
6.重命名文件或文件夹
src = r'D:/test'
dst = r'D:/tests'
if os.path.exists(src):
    os.rename(src, dst)
src = r'D:/tests/2.txt'
dst = r'D:/tests/555.txt'
if os.path.exists(src):
    os.rename(src, dst)
# 递归重命名文件
old = r'D:/tests/3.txt'
new = r'D:/tests/a/1.txt'
if os.path.exists(old):
    os.renames(old, new)
old = r'D:/tests/a'
new = r'D:/tests/b'
if os.path.exists(old):
    os.renames(old, new)
7. 获取系统环境变量
# 获取系统所有环境变量
environment = os.environ
print(environment)              # 结果 environ({'ANDROID': XXX, 'ANDROID_HOME': XXX, 'PATH': XXX, ....})
# 获取"ANDROID"的环境变量信息
print(environment['ANDROID'])   # 结果 C:\Users\admin\AppData\Local\Android\Sdk\platform-tools

Eg:设置系统环境变量

# 设置系统环境变量
path_result = os.environ['PATH']
add_path = 'D:\\first'
if path_result[-1] == ';':
    os.environ['PATH'] += add_path
else:
    os.environ['PATH'] += ";" + add_path
8. 打开PC端某个文件或文件夹
path = r"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
os.startfile(path)
path = r"C:\Program Files (x86)\Tencent\QQ\Bin"
os.startfile(path)
9.遍历目录
  • top:遍历的顶级目录的路径
    top目录下返回一个三元组(dirpath, dirnames, filenames)
    dirpath:字符串类型,当前正在遍历的文件夹的地址;
    dirnames:列表类型,dirpath目录下所有目录的名称(不包括子目录);
    filenames:列表类型,dirpath目录下所有的文件(不包括子目录);
  • topdown:默认为True
    topdown为True表示先遍历top目录,再遍历top的子目录;
    topdown为False表示先遍历top的子目录,再遍历top目录;
  • onerror:默认为None
    onerror为None表示忽略文件遍历时的错误;
    onerror不为None则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历;
  • followlinks:默认为False
    followlinks为False表示优先遍历top的子目录;
    followlinks为True表示遍历目录下的快捷方式
def walk_operate(path):
    for dirpath, dirnames, filenames in os.walk(path):
        print(dirpath, dirnames, filenames)
top_path = 'D:\\tests'
walk_operate(top_path)
"""结果
D:\tests ['1', '2'] []
D:\tests\1 [] ['1.txt', '2.txt']
D:\tests\2 ['2.1'] ['1.txt']
D:\tests\2\2.1 [] []
"""
#表示tests目录下有两个文件夹1和2
# 子目录1下有两个文件1.txt和2.txt,无文件夹
# 子目录2下有一个文件夹2.1,一个文件1.txt
# 子目录2下的子目录2.1下无文件夹和文件
10. 执行系统命令os.system
11.执行系统命令os.popen

command:系统shell命令;
mode:非必写项,模式权限('r'和'w'),默认为'r';
bufsize:非必写项,表示文件需要的缓冲大小,0表示无缓冲,1表示行缓冲,-1表示使用系统默认值(默认为-1);

# 执行系统命令
cmd = "adb devices"
run_result = os.system(cmd)
print("sys_result:", run_result)

run_result = os.popen(cmd)
popen_result = run_result.readlines()
print("popen_result:", popen_result)
run_result.close()

run_result = os.popen(cmd)
popen_result = run_result.read()
print("popen_result:\n", popen_result)
run_result.close()

'''结果
sys_result: 0
popen_result: ['List of devices attached \n', '106D111805005938\tdevice\n', '\n']
popen_result:
 List of devices attached 
106D111805005938    device


'''

Eg1:获取所有连接PC的手机device_name

def get_devices():
    """
    获取所连devices信息
    :return: 若device存在,则以列表形式返回;若device不存在,则返回None
    """
    cmd = "adb devices"
    f = os.popen(cmd)
    result = f.readlines()
    f.close()
    devices = []
    for temp in result:
        if '\tdevice' in temp:
            device_name = temp.split('\tdevice')[0]
            devices.append(device_name)
    if len(devices) > 0:
        return devices
    else:
        return None
get_devices()

Eg2:执行系统多条命令:命令之间通过&&关联

# 执行多条命令
# 由于仅是执行系统命令,无需返回结果,故os.system()或os.popen()方式均可
cmd1 = "E:"
cmd2 = "cd demo"
cmd3 = "mkdir test"
cmd = "%s && %s && %s" % (cmd1, cmd2, cmd3)
os.system(cmd)
# os.popen(cmd)
上一篇 下一篇

猜你喜欢

热点阅读