当前位置: 首页 > news >正文

影刀RPA 50个最常用的Python代码片段合集

影刀RPA 50个最常用的Python代码片段合集

作者:林焱


什么情况用

写RPA流程时,有大量常用的代码片段会反复用到——发送HTTP请求、读写Excel、正则提取、日期处理、去重排序。每次都要翻之前的代码或搜索引擎,效率很低。

这里整理了50个经过实际验证的代码片段,覆盖RPA日常开发的绝大部分场景。建议收藏,随用随查。


一、HTTP请求(8个)

1. 通用GET请求

importrequests resp=requests.get("https://api.example.com/data",headers={"Authorization":"Bearer TOKEN"},timeout=30)data=resp.json()

2. 通用POST请求(JSON)

resp=requests.post("https://api.example.com/create",json={"name":"张三","age":28},timeout=30)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/41fce8b6a8244091a967b8ec162d2fcf.png#pic_center)

3. 带重试的请求

defrequest_with_retry(url,max_retries=3):foriinrange(max_retries):try:resp=requests.get(url,timeout=30)resp.raise_for_status()returnresp.json()exceptExceptionase:ifi==max_retries-1:raisetime.sleep(2**i)# 指数退避

4. 文件上传

withopen("file.pdf","rb")asf:resp=requests.post("https://api.example.com/upload",files={"file":f})

5. 下载文件(流式)

resp=requests.get("https://example.com/large.zip",stream=True)withopen("large.zip","wb")asf:forchunkinresp.iter_content(chunk_size=8192):f.write(chunk)

6. Session保持登录

session=requests.Session()session.post("https://example.com/login",json={"user":"admin","pwd":"123"})# 后续请求自动带Cookiedata=session.get("https://example.com/dashboard").json()

7. 设置代理

proxies={"http":"http://127.0.0.1:7890","https":"http://127.0.0.1:7890"}resp=requests.get("https://api.example.com",proxies=proxies)

8. URL参数编码

fromurllib.parseimporturlencode,quote params={"keyword":"笔记本电脑","page":1}url=f"https://search.example.com?{urlencode(params)}"# 单独编码:quote("笔记本电脑") → "%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91"

二、Excel/CSV操作(8个)

9. 读取Excel

importpandasaspd df=pd.read_excel("data.xlsx",sheet_name="Sheet1")df=pd.read_excel("data.xlsx",sheet_name=None)# 读取所有Sheet,返回字典

10. 写入Excel(多Sheet)

withpd.ExcelWriter("output.xlsx")aswriter:df1.to_excel(writer,sheet_name="汇总",index=False)df2.to_excel(writer,sheet_name="明细",index=False)

11. 读取CSV(处理编码)

encodings=['utf-8','gbk','gb2312','utf-8-sig']forencinencodings:try:df=pd.read_csv("data.csv",encoding=enc)breakexceptUnicodeDecodeError:continue

12. DataFrame常用操作

df.head(10)# 前10行df.describe()# 统计描述df["列名"].value_counts()# 值计数df.drop_duplicates()# 去重df.dropna()# 删除空行[video(video-dwFFlvcd-1783409315797)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限!)]df.fillna(0)# 空值填0df.sort_values("金额",ascending=False)# 排序

13. 数据筛选

df[df["状态"]=="已完成"]df[(df["金额"]>1000)&(df["城市"].isin(["北京","上海"]))]df[df["备注"].str.contains("紧急",na=False)]

14. 分组汇总

df.groupby("部门").agg({"销售额":"sum","订单数":"count"})df.groupby(["城市","月份"])["金额"].sum().unstack()

15. 合并多个DataFrame

# 纵向拼接pd.concat([df1,df2,df3],ignore_index=True)# 横向关联(类似SQL JOIN)pd.merge(df1,df2,on="订单号",how="left")

16. 日期筛选

df["日期"]=pd.to_datetime(df["日期"])last_7_days=df[df["日期"]>=datetime.now()-timedelta(days=7)]this_month=df[df["日期"].dt.month==datetime.now().month]

三、正则与文本处理(7个)

17. 提取手机号

importre phones=re.findall(r'1[3-9]\d{9}',text)

18. 提取身份证号

ids=re.findall(r'\d{17}[\dXx]',text)

19. 提取邮箱

emails=re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}',text)

20. 提取URL

urls=re.findall(r'https?://[^\s<>"{}|\\^`\[\]]+',text)

21. 提取日期

dates=re.findall(r'\d{4}[-/年]\d{1,2}[-/月]\d{1,2}[日]?',text)

22. 字符串清洗

text=re.sub(r'\s+','',text)# 去掉所有空白text=re.sub(r'<[^>]+>','',text)# 去掉HTML标签text=text.replace('\u200b','').strip()# 去掉零宽空格

23. 中文提取 vs 非中文提取

chinese=''.join(re.findall(r'[\u4e00-\u9fff]',text))# 只保留中文non_chinese=re.sub(r'[\u4e00-\u9fff]','',text)# 去掉中文

四、日期时间(6个)

24. 获取当前时间各种格式

fromdatetimeimportdatetime,date,timedelta now=datetime.now()print(now.strftime("%Y-%m-%d %H:%M:%S"))# 2024-06-26 14:30:00print(now.strftime("%Y%m%d_%H%M%S"))# 20240626_143000(文件名用)print(now.strftime("%Y年%m月%d日 %H:%M"))# 2024年06月26日 14:30

25. 日期加减

yesterday=datetime.now()-timedelta(days=1)last_week=datetime.now()-timedelta(weeks=1)last_month=datetime.now()-timedelta(days=30)# 约1个月

26. 月份加减(精确)

fromdateutil.relativedeltaimportrelativedelta next_month=datetime.now()+relativedelta(months=1)last_month_same_day=datetime.now()-relativedelta(months=1)

27. 获取本月第一天和最后一天

importcalendar today=date.today()first_day=today.replace(day=1)last_day=today.replace(day=calendar.monthrange(today.year,today.month)[1])

28. 字符串解析为日期

dt=datetime.strptime("2024-06-26","%Y-%m-%d")dt=datetime.strptime("2024年6月26日 14:30","%Y年%m月%d日 %H:%M")

29. 计算两个日期相差天数

diff=(datetime(2024,12,31)-datetime(2024,1,1)).days# 365

五、文件操作(5个)

30. 遍历文件夹

importosforroot,dirs,filesinos.walk("./data"):forfinfiles:print(os.path.join(root,f))

31. 确保目录存在

os.makedirs("./output/reports",exist_ok=True)

32. 读写文本文件

withopen("input.txt","r",encoding="utf-8")asf:content=f.read()withopen("output.txt","w",encoding="utf-8")asf:f.write("Hello World")

33. 文件大小和时间

size_mb=os.path.getsize("file.pdf")/(1024*1024)mtime=datetime.fromtimestamp(os.path.getmtime("file.pdf"))

34. 临时文件

importtempfilewithtempfile.NamedTemporaryFile(delete=False,suffix=".csv")asf:f.write(b"data")temp_path=f.name# 用完删除os.unlink(temp_path)

六、数据转换(5个)

35. JSON ↔ Python

importjson obj=json.loads('{"name":"张三","age":28}')# JSON → dicttext=json.dumps(obj,ensure_ascii=False,indent=2)# dict → JSONwithopen("data.json","r")asf:data=json.load(f)# 读JSON文件

36. 字典列表 → DataFrame

data=[{"name":"张三","age":28},{"name":"李四","age":32}]df=pd.DataFrame(data)

37. DataFrame → 字典列表

records=df.to_dict("records")

38. Base64编解码

importbase64 encoded=base64.b64encode(b"hello").decode()# aGVsbG8=decoded=base64.b64decode("aGVsbG8=").decode()# hello

39. URL编解码

fromurllib.parseimportquote,unquote encoded=quote("笔记本电脑")# %E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91decoded=unquote(encoded)# 笔记本电脑

七、数据库操作(4个)

40. SQLite读写

importsqlite3 conn=sqlite3.connect("data.db")df=pd.read_sql("SELECT * FROM users WHERE status='active'",conn)conn.execute("INSERT INTO logs VALUES (?, ?, ?)",(1,"info","success"))conn.commit()conn.close()

41. MySQL连接

importpymysql conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",password="pwd",database="test",charset="utf8mb4")[video(video-wcqXfyhf-1783409322478)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]

42. 批量插入

data=[(1,"张三"),(2,"李四"),(3,"王五")]conn.executemany("INSERT INTO users (id, name) VALUES (?, ?)",data)conn.commit()![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/00042aaf17c046ee980af46513641154.png#pic_center)

43. 数据库连接上下文管理器

fromcontextlibimportcontextmanager@contextmanagerdefget_db():conn=sqlite3.connect("data.db")try:yieldconnfinally:conn.close()withget_db()asconn:df=pd.read_sql("SELECT * FROM orders",conn)

八、影刀专用(3个)

44. 接收影刀变量

# 影刀传入的变量直接在Python节点中可用data_list=json.loads(youdao_variable_name)

45. 输出给影刀后续节点

# print的内容会被影刀捕获作为节点输出result={"status":"success","count":100}print(json.dumps(result,ensure_ascii=False))

46. 多行输出

print("第一行输出")# 会被影刀读取为变量值importsysprint("调试信息",file=sys.stderr)# 不会影响影刀的变量读取

九、错误处理与日志(2个)

47. 通用异常处理模板

importtracebacktry:# 业务代码result=process_data()exceptValueErrorase:print(f"数据格式错误:{e}")# 记录详细错误![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6b2f5b77575e4dbfba147cf08640056e.png#pic_center)withopen("error.log","a")asf:f.write(f"[{datetime.now()}] ValueError:{traceback.format_exc()}\n")exceptExceptionase:print(f"未知错误:{e}")traceback.print_exc()

48. 简单日志记录

importlogging logging.basicConfig(level=logging.INFO,format='%(asctime)s [%(levelname)s] %(message)s',handlers=[logging.FileHandler("rpa.log",encoding="utf-8"),logging.StreamHandler()])logging.info("流程开始")logging.warning("处理异常数据")logging.error("流程失败",exc_info=True)

十、实用工具(2个)

49. 进度条显示

defprogress_bar(current,total,prefix=""):percent=current/total*100bar_len=40filled=int(bar_len*current/total)bar="█"*filled+"░"*(bar_len-filled)print(f"\r{prefix}|{bar}|{percent:.1f}%",end="")ifcurrent==total:print()# 使用foriinrange(1,101):progress_bar(i,100,"处理中")time.sleep(0.05)

50. 哈希计算

importhashlib text="hello world"md5_hash=hashlib.md5(text.encode()).hexdigest()# 32位MD5sha256_hash=hashlib.sha256(text.encode()).hexdigest()# 64位SHA256file_md5=hashlib.md5(open("file.txt","rb").read()).hexdigest()# 文件MD5

有什么坑

坑1:盲目复制粘贴

这些代码片段是起点,不是终点。直接复制不检查参数,比如忘记改编码格式、timeout设太大或太小,都会在你实际使用时出问题。

坑2:内存中的密码

# ❌ 别这样写 API_KEY = "sk-abc123xyz456" # 放在代码片段里就分享出去了 # ✅ 从环境变量或配置文件读取 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/782c7a4584d445a7949b504f54edc5a9.png#pic_center) import os API_KEY = os.environ.get("RPA_API_KEY")

坑3:编码问题无处不在

中文环境下,90%的问题和编码有关。记住房口诀:读文件用encoding="utf-8",写入JSON加ensure_ascii=False,CSV先尝试utf-8再降级gbk。


总结:这50个代码片段是我在实际RPA开发中最频繁使用到的。保存成文件、加入代码片段工具(如SnippetsLab、VS Code Snippets),随用随查能省大量时间。但记住——理解每段代码在做什么,比复制粘贴更重要。

http://www.jsqmd.com/news/1145697/

相关文章:

  • iOS 电池性能优化 从能耗监控到应用省电的实践方法
  • OpenCV 4.8 图像去阴影实战:LAB空间3步法,文档阴影去除率达85%
  • 一次开发,多端高效协同:解码HarmonyOS SDK窗口的响应式设计哲学
  • 决策树 vs SVM vs NN:3种方法在6类通信干扰识别中的性能对比
  • 小微商户进销存数字化:零代码快速落地库存与记账一体化方案
  • RK3588 NPU 驱动 v0.9.8 升级实战:解决 RKNN Runtime 版本不匹配与卡死问题
  • 为什么选择Mind Elixir:3种高效思维导图实战方法解决你的知识管理难题
  • CHS零壹视频恢复程序Framework算法介绍
  • 第 6 篇:Git 分支进阶:分支策略、stash、bugfix 和 feature 开发
  • 影刀RPA AI图像识别自动化:验证码与商品图片智能处理
  • openEuler/community-issue常见问题解答:面向新手的完整入门指南
  • 直播流媒体工程师:做了四年直播我发现下一个风口是数字人
  • 线性注意力机制学习笔记
  • FFmpeg-Builds-Win32:自动化构建系统如何革新多媒体开发工作流
  • 大模型端侧部署:从模型压缩到推理加速
  • 2026 年射频测试仪器保养与校准周期指南——延长寿命、保证数据可靠
  • 出海转化链路断裂,传播易如何打通全流程营销闭环?
  • 【小白也能轻松玩转龙虾】虾壳云一键部署新手专属教程,轻松驾驭 OpenClaw v2.7.9 智能程序(附最新安装包)
  • Claude Code 进阶使用指南:从配置到实战技巧全解析
  • OpenClaw Event Bus 架构深度解析:为什么事件溯源是 AI Agent 时代的最佳协作范式?
  • 【注意力机制】ICIP | HWB:半小波注意力模块,频域双注意力机制让暗光增强细节零丢失!
  • 为什么你的校园生意只能做两三个月?缺一套长效经营体系
  • Buzz语音转录工具:3步实现本地离线专业级音频转文字
  • Plasma Teeth Whitening是什么?
  • Unity URP光照模型实战:从Blinn-Phong到PBR原理与Shader实现
  • 各向异性可见性建模:让机器人真正理解‘看得见’的物理含义
  • SDLC 落地实战:从 0 到 1 构建甲方安全开发流程的 5 个关键阶段
  • 细胞 ATP 检测和活体肿瘤示踪,共用一套双荧光素酶体系吗?_ MedChemExpress (MCE)
  • 智推时代完成数千万元天使轮融资,GEO市场2030年规模或突破500亿!
  • 【Springboot毕设全套源码+文档】基于 Vue 和 SpringBoot 的旅游管理系统的设计与实现(丰富项目+远程调试+讲解+定制)