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

(9)python开发经验

文章目录

      • 1 os.path.join()拼接路径
      • 2 条件变量
      • 3 添加临时环境变量


更多精彩内容
👉内容导航 👈
👉Qt开发 👈
👉python开发 👈

1 os.path.join()拼接路径

os.path.join() 是 Python 中处理文件路径拼接的核心函数,能自动适配不同操作系统的路径分隔符(如 Windows 的 \ 和 Linux/macOS 的 /)。以下是详细说明:


基本用法

import ospath = os.path.join('dir1', 'dir2', 'file.txt')
# 输出结果(以 Linux 为例): 'dir1/dir2/file.txt'
# Windows 输出: 'dir1\\dir2\\file.txt'

核心规则

  1. 绝对路径会重置拼接

    • 如果某个参数是绝对路径(以 / 或盘符开头),则之前的路径会被丢弃
    os.path.join('dir1', '/dir2', 'file.txt')  # 结果: '/dir2/file.txt'
    os.path.join('C:\\Users', 'D:\\data', 'file.txt')  # 结果: 'D:\\data\\file.txt'(Windows)
    
  2. 空字符串处理

    • 空字符串参数会被忽略,但可能影响盘符(Windows):
    os.path.join('', 'dir1', '', 'file.txt')  # 结果: 'dir1/file.txt'
    os.path.join('C:', '', 'file.txt')        # 结果: 'C:file.txt'(Windows 下需注意!)
    
  3. 自动处理分隔符

    • 若参数末尾已有分隔符,不会重复添加:
    os.path.join('dir1/', 'dir2')  # 结果: 'dir1/dir2'
    

注意事项

  1. 不要手动拼接路径

    • ❌ 避免 path = 'dir1' + '/' + 'file.txt',因为跨平台兼容性差。
    • ✅ 始终使用 os.path.join()
  2. 处理空路径的风险

    • 空字符串可能导致意外结果:
    os.path.join('dir1', '', 'file.txt')  # 结果: 'dir1/file.txt'
    
  3. 特殊字符与非法字符

    • 如果路径包含非法字符(如 *?),函数不会报错,但后续文件操作可能失败:
    os.path.join('dir*', 'file?.txt')  # 合法拼接,但无法实际创建文件
    
  4. 跨平台行为差异

    • Windows 中处理盘符时需谨慎:
    os.path.join('C:/dir1', 'D:/dir2')  # 结果: 'D:/dir2'(丢弃前半部分)
    

最佳实践

  • 组合多个路径片段时

    base_dir = 'project'
    sub_dir = 'data'
    file_name = 'config.json'
    full_path = os.path.join(base_dir, sub_dir, file_name)
    
  • 处理用户输入路径时

    user_input = '/user/custom_path'  # 可能包含绝对路径
    safe_path = os.path.join('default_dir', user_input.lstrip('/'))
    

常见问题

Q:为什么拼接绝对路径时前面的路径被丢弃?
A:这是设计逻辑——绝对路径表示“根目录开始”,因此会覆盖之前的相对路径。

Q:如何确保路径末尾有斜杠?
A:显式添加:

dir_path = os.path.join('dir1', 'dir2') + os.sep  # 结果: 'dir1/dir2/'

2 条件变量

注意事项:

  1. 必须持有锁
    • 调用 wait()notify()notify_all() 前必须通过 acquire()with 语句获取锁。
import threadingcond = threading.Condition()# 等待
with cond:cond.wait()  # 等待# 唤醒
with cond:cond.notify()  # 等待

3 添加临时环境变量

在代码中添加临时环境变量,便于访问指定路径下的内容;

def __set_environ(self):"""设置环境变量,将adb目录添加到PATH环境变量:return:"""# 获取当前的PATH环境变量current_path = os.environ['PATH']# 新增路径到PATH环境变量adb_dir = get_adb_dir()if not os.path.exists(adb_dir):logger.error(f"adb目录 {adb_dir} 不存在")returnos.environ['PATH'] = current_path + os.pathsep + str(adb_dir)


http://www.lryc.cn/news/2378295.html

相关文章:

  • 【C++详解】string各种接口如何使用保姆级攻略
  • 2025深圳杯D题法医物证多人身份鉴定问题四万字思路
  • 【时时三省】(C语言基础)字符数组应用举例2
  • Mysql触发器(附案例)
  • 使用DDR4控制器实现多通道数据读写(十二)
  • Kafka 生产者工作流程详解
  • 完整卸载 Fabric Manager 的方法
  • 地下停车场调频广播无线覆盖系统:融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台
  • 【Linux】进程间通信(一):认识管道
  • 中大型水闸安全监测系统解决方案
  • 蓝桥杯12届国B 123
  • Harmony开发 List、Grid拖动自定义排序实现
  • 迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
  • 【001】.so文件分析之 ELF格式符号
  • QT之LayOut布局
  • 无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用
  • C++类与对象--1 特性一:封装
  • Linux:计算机的层状结构
  • 【SpringBoot】关于MP使用中配置了数据库表前缀的问题
  • AI 赋能防艾宣传:从创意到实践,我的 IP 形象设计之旅
  • Redis 事务与管道:原理、区别与应用实践
  • 每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h
  • 手机打电话时如何将通话对方的声音在手机上识别成文字
  • 重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
  • C++学习:六个月从基础到就业——C++11/14:列表初始化
  • SQL语句执行问题
  • 2025系统架构师---选择题知识点(押题)
  • flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
  • P5682 [CSP-J2019 江西] 次大值
  • Elasticsearch 性能优化面试宝典