更多精彩内容 |
---|
👉内容导航 👈 |
👉Qt开发 👈 |
👉python开发 👈 |
1 os.path.join()拼接路径
os.path.join()
是 Python 中处理文件路径拼接的核心函数,能自动适配不同操作系统的路径分隔符(如 Windows 的 \
和 Linux/macOS 的 /
)。以下是详细说明:
基本用法
import os
path = os.path.join('dir1', 'dir2', 'file.txt')
# 输出结果(以 Linux 为例): 'dir1/dir2/file.txt'
# Windows 输出: 'dir1\\dir2\\file.txt'
核心规则
绝对路径会重置拼接
- 如果某个参数是绝对路径(以
/
或盘符开头),则之前的路径会被丢弃:
os.path.join('dir1', '/dir2', 'file.txt') # 结果: '/dir2/file.txt' os.path.join('C:\\Users', 'D:\\data', 'file.txt') # 结果: 'D:\\data\\file.txt'(Windows)
- 如果某个参数是绝对路径(以
空字符串处理
- 空字符串参数会被忽略,但可能影响盘符(Windows):
os.path.join('', 'dir1', '', 'file.txt') # 结果: 'dir1/file.txt' os.path.join('C:', '', 'file.txt') # 结果: 'C:file.txt'(Windows 下需注意!)
自动处理分隔符
- 若参数末尾已有分隔符,不会重复添加:
os.path.join('dir1/', 'dir2') # 结果: 'dir1/dir2'
注意事项
不要手动拼接路径
- ❌ 避免
path = 'dir1' + '/' + 'file.txt'
,因为跨平台兼容性差。 - ✅ 始终使用
os.path.join()
。
- ❌ 避免
处理空路径的风险
- 空字符串可能导致意外结果:
os.path.join('dir1', '', 'file.txt') # 结果: 'dir1/file.txt'
特殊字符与非法字符
- 如果路径包含非法字符(如
*
、?
),函数不会报错,但后续文件操作可能失败:
os.path.join('dir*', 'file?.txt') # 合法拼接,但无法实际创建文件
- 如果路径包含非法字符(如
跨平台行为差异
- 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 条件变量
注意事项:
- 必须持有锁
- 调用
wait()
、notify()
或notify_all()
前必须通过acquire()
或with
语句获取锁。
- 调用
import threading
cond = 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} 不存在")
return
os.environ['PATH'] = current_path + os.pathsep + str(adb_dir)