筱团Blog筱团のBlog

自动化办公

筱团·2023-03-04 14:50·83 次阅读

自动化办公

Prerequisite#

参考资料:

获取计算机信息#

  • Python
Copy
from pprint import pprint import psutil import os import sys import platform print(os.name) # 操作系统类型(posix -> linux,nt -> windows,java -> java 虚拟机) print(os.environ) # 操作系统中定义的环境变量 print(os.environ.get('PATH')) # 获取某个环境变量的值 print(os.path.abspath('.')) # 当前目录的绝对路径 print(os.path.join(os.path.abspath('.'), 'temp')) # 测试当前操作系统的拼接方式 print(sys.platform) # 系统的平台标识(win32 -> windows,linux -> linux,cygwin -> windows,darwin -> Mac OS) print(sys.executable) # Python 解释器的路径 print(platform.system()) # 操作系统的名字(Linux,Windows,Java) print(platform.platform()) # 操作系统的名称及版本号 print(platform.version()) # 操作系统的版本号 print(platform.architecture()) # 操作系统的位数 print(platform.machine()) # 计算机的处理器架构 print(platform.node()) # 计算机的名称 print(platform.processor()) # 计算机的处理器信息 print(platform.uname()) # 包含上面所有的信息汇总 print(psutil.cpu_count()) # CPU 的逻辑数量 print(psutil.cpu_count(logical=False)) # CPU 的物理核心数量 print(psutil.cpu_percent(interval=0.5, percpu=True)) # 所有的 CPU 使用率(个数为逻辑数量,每隔 0.5s 刷新一次) print(psutil.virtual_memory()) # 内存使用情况(总内存、可用内存、内存使用率、已使用的内存) pprint(psutil.disk_partitions()) # 磁盘分区 print(psutil.disk_usage("C:\\")) # 某个磁盘使用情况 pprint(psutil.net_io_counters(pernic=True)) # 列出所有网卡的网络 IO 统计信息(WLAN、以太网等) pprint(psutil.net_if_addrs()) # 列出所有网卡的配置信息(IP 地址、Mac地址等) pprint(psutil.users()) # 当前登录的用户信息 print(datetime.datetime.fromtimestamp(psutil.boot_time())) # 系统的启动时间 """ 关于 pid 进程的详细,可以看下面的案例 """
  • 命令行
Copy
nvidia-smi # 查看 CUDA 版本信息 nvdebugdump --list # 查看显卡列表 nvcc --version # 显卡版本

文件操作基础#

ps:对于路径问题,建议使用 / 符号来表示

  • 常见函数
Copy
# 将工作目录移至指定路径 os.chdir() # 获取当前的工作路径 os.getcwd() # 列举出指定目录下的所有文件 os.listdir() # 创建目录 os.mkdir() # 用于检验文件是否存在 os.path.exists() # 改变文件或文件夹的名称或位置 os.rename(old_path, new_path) # 分离扩展名 os.path.splitext() # 文件路径拼接 os.path.join() # 分离扩展名 os.path.splitext()
  • 常见用法
Copy
# 引用上层文件 sys.path.append("..") # 或者 sys.path.append(os.path.join(os.path.dirname(__file__), "..")) # 跳转到上级目录 os.chdir('..') # 文件改名(old_path,new_path) os.rename('./b.txt', './a.txt') # 复制文件 shutil.copy("../a.txt", "./b.txt") # 列出当前目录下的所有目录 [x for x in os.listdir('.') if os.path.isdir(x)] # 列出所有的 .py 文件 [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'] # 分离扩展名的方法 path = '/Users/wenwen/Desktop/娱乐/2020/开心.jpg' file_name = '开心.jpg' file_name2 = '2.开心.jpg' # 演示一:分离路径(获取后缀) print(os.path.splitext(path)) # 输出:('/Users/wenwen/Desktop/娱乐/2020/开心', '.jpg') # 演示二:分离路径(获取文件名) print(os.path.split(path)) # 输出:('/Users/wenwen/Desktop/娱乐/2020', '开心.jpg') # 演示三:分离文件名 print(os.path.splitext(file_name)) # 输出:('开心', '.jpg') # 演示四:分离带 . 的文件名 print(os.path.splitext(file_name2)) # 输出:('2.开心', '.jpg')

案例#

  • 案例一:获取目录下全部文件扩展名
Copy
import os path = '/Users/wenwen/Desktop/娱乐/2020' os.chdir(path) # 用列表生成式对目录中的每个文件进行分割,并取元组中第二个元素 split = [os.path.splitext(item)[1] for item in os.listdir()] # 过滤掉空字符串 extensions = [i for i in split if i != ''] # 用 set() 函数给最后的结果去重 extensions = list(set(extensions)) print(extensions) # 输出:['.jpg', '.docx', '.mp3']
Copy
""" r 只读 w+ 读写 a+ 追加 b 二进制 encoding='gbk' 编码 errors='ignore' 忽略文件中非法编码的字符 """ # 读取全部信息 f = open("test.txt", "r") data = f.read() f.close() # 写入全部信息 f = open("test.txt", "w+") data = "123" f.write(data) # 读取每行信息 f = open("test.txt", 'r') lines = f.readlines() for line in lines: # replace 执行顺序先左再右 data = line.replace('\r', '').replace('\n', '') print(data) # 记得结束函数调用 f.close() """ # 这种方式与上面的大同小异,甚至更加麻烦,不推荐 with open("test.txt", 'r') as f: lines = f.readlines() for line in lines: data = line.replace('\r', '').replace('\n', '') print(data) """
  • 案例三:一键重命名
Copy
import os # 修改路径 path = 'D:/Work/' f = os.listdir(path) n = 0 name_num = 0 for i in f: # 仅选择目标格式的文件 if("png" not in f[n]): n += 1 continue # 设置旧文件名(就是路径 + 文件名) oldname = path + f[n] # print(oldname) # 设置新文件名 newname = path + 'tv-' + str(name_num) + '.png' # 用 os 模块中的 rename 方法对文件改名 os.rename(oldname, newname) print(oldname, '======>', newname) n += 1 name_num += 1
  • 案例四:命令行关键字参数(手动)
Copy
import os import sys import argparse # 1. 直接接收参数 print('参数个数为:', len(sys.argv), '个参数') print('参数列表:', str(sys.argv)) print(sys.argv[1], sys.argv[2]) """ python test.py "happy" "./input/" --------------------------------------- 参数个数为: 3 个参数 参数列表: ['.\\comic.py', 'happy', './input/'] happy ./input/ """ # 2. 设定接收参数 if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--theme', default='校园爱情', type=str, help='主题') parser.add_argument('--file', default='./input/', type=str, help='文件地址') args = parser.parse_args() if not os.path.exists(args.file): print('Cannot find input path: {0}'.format(args.file)) exit() print(args.theme, args.file) ''' python test.py --theme "happy" --file "./input/" --------------------------------------- happy ./input/ '''
  • 案例五:命令行关键字参数(自动)
Copy
import subprocess def runcmd(command): # 不显示输入内容 stdout=subprocess.PIPE, stderr=subprocess.PIPE # 编码方式 encoding="utf-8" ret = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if ret.returncode == 0: return("success:", ret) else: return("error:", ret) runcmd(["python", "--version"]) # result = runcmd(["python", "--version"])
  • 案例六:进程
Copy
from pprint import pprint import psutil # 列出全部的正在运行的 pid 进程(以数组的形式) pprint(psutil.pids()) # 假设已知微信的进程是 16948 p = psutil.Process(pid=16948) # 进程名称 print(p.name()) # WeChat.exe # 进程的exe路径 print(p.exe()) # D:\WeChat\WeChat.exe # 进程的工作目录 print(p.cwd()) # D:\WeChat # 进程启动的命令行 print(p.cmdline()) # ['D:\\WeChat\\WeChat.exe'] # 当前进程 id # 父进程 id # 父进程 # 子进程列表 # 进程状态 # 进程用户名 # 进程创建时间,返回时间戳 # 进程使用的 cpu 时间 # 进程所使用的的内存 # 进程打开的文件 # 进程相关的网络连接 # 进程内的线程数量,这个进程开启了多少个线程 # 这个进程内的所有线程信息 # 进程的环境变量 # 结束进程, 返回 None, 执行之后微信就会被强制关闭 # 上面的内容不做记录,详情看开头的参考资料【​Python常用库之psutil使用指南】
  • 案例七:处理异常
Copy
# 处理全部异常 try: a = '2' + 2 except Exception as e: print(e) """ can only concatenate str (not "int") to str """ # 不追踪错误写法(断言异常) def function(): try: a = 100 assert a == 10 except AssertionError as e: print("断言语句异常") # finally 语句写不写都行,但写了一定会执行 finally: print("End") function() """ 断言语句异常 End """ # 追踪错误写法(断言异常) def function(): try: a = 100 assert a == 10 except: raise AssertionError("断言语句异常") from None finally: print("End") function() """ Traceback (most recent call last): File "C:\Users\WPS\Desktop\Temporary\test.py", line 19, in <module> function() File "C:\Users\WPS\Desktop\Temporary\test.py", line 15, in function raise AssertionError("断言语句异常") AssertionError: 断言语句异常 """

CSV#

  • 写入 CSV
Copy
import csv # 1. 写入多行(writerows) with open('test.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(["6","6","6"]) """ test.csv 内容如下: 6 6 6 """ # 2. 写入一行(writerow) with open('test.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(["6","6","6"]) """ test.csv 内容如下: 6,6,6 """
  • 读取 CSV
Copy
import csv with open('test.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row) """ test.csv 内容如下: ['6', '6', '6'] """

JSON#

Copy
import json # 读取 JSON with open('./input.json', 'r', encoding='utf-8') as f: # data 为数组或者字典形式 data = json.load(f) # 显示 JSON,缩进为 2 个空格 print(json.dumps(data, indent=2)) # 写入 JSON with open('./output.json', 'w+', encoding='utf-8') as f: # 写入 JSON 的缩进为 2 个空格 talks_json = str(json.dumps(data, indent=2)).replace("'","\"") f.write(talks_json)

发邮件#

使用到 yagmail 模块,它主要用来自动化发送邮件

Copy
pip install yagmail
Copy
# 导入 yagmail 模块 import yagmail import os path = os.path.join(os.path.abspath('.'), 'a.xlsx') print(path) # 连接邮箱服务器 yag = yagmail.SMTP(user='2796308562@qq.com', password='cqbmekjsudcfdhdh', host='smtp.qq.com') # 邮件内容 yag.send(to=['2796308562@qq.com'], subject='Python 发送邮件', contents=['带有附件的', path])
posted @   筱团  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
目录