如何用Python将完整文件路径拆分为文件名与所在目录
问题:从完整文件路径拆分出文件名与所在目录
背景说明
我在PowerShell中通过以下代码配置关联,让文件打开时调用Python脚本:
$dataKey = 'cmd /K "ipy.exe C:\MiCarpetaPython\CompilerTool.py %1"' New-Item -Path $commandKey -Force Set-ItemProperty -Path $commandKey -Name '(default)' -Value $dataKey
注:%1会传递触发快捷方式时的目标文件完整路径,目前能正确获取到类似这样的路径:C:\Users\223122412\Documents\FIFA\1_RVS.zip
遇到的问题
我的Python脚本当前的参数处理逻辑不符合需求,现有代码:
import sys import os if len(sys.argv)!= 2: print("Usage: python CompilerTool.py <ZipFileName> <DirectoryOfZip>") sys.exit(1) source_zip_file = sys.argv[1] folder_name = os.path.basename(source_zip_file) directory_of_zip = os.path.dirname(source_zip_file)
我需要的参数结构是:"C:\Program Files\IronPython 2.7\ipy.exe" CompilerTool.py 1_RVS.ZIP C:\Users\223122412\Documents\FIFA
也就是脚本需要接收带扩展名的压缩文件名和压缩文件所在目录两个参数,但现在通过%1传递的是完整路径,怎么把完整路径C:\Users\223122412\Documents\FIFA\1_RVS.zip拆分成1_RVS.zip和C:\Users\223122412\Documents\FIFA?
解决方案
提供两种可行方案,按需选择:
方案1:修改Python脚本适配当前参数
既然脚本现在只收到一个完整路径参数,直接用你已经用到的os.path模块方法拆分即可,调整脚本逻辑:
import sys import os if len(sys.argv)!= 2: print("Usage: python CompilerTool.py <FullPathToZip>") sys.exit(1) source_zip_file = sys.argv[1] # 获取带扩展名的文件名 zip_filename = os.path.basename(source_zip_file) # 获取文件所在目录 zip_directory = os.path.dirname(source_zip_file) # 后续业务逻辑直接使用zip_filename和zip_directory即可
方案2:在PowerShell中拆分路径后传递两个参数
如果一定要让脚本接收两个参数,可在PowerShell里用Split-Path命令拆分%1的路径,修改$dataKey定义:
# 处理无空格路径的版本 $dataKey = 'cmd /K "ipy.exe C:\MiCarpetaPython\CompilerTool.py (Split-Path -Leaf "%1") (Split-Path -Parent "%1")"'
若路径包含空格,需给参数加引号避免解析错误:
$dataKey = 'cmd /K "ipy.exe C:\MiCarpetaPython\CompilerTool.py ""$(Split-Path -Leaf "%1")"" ""$(Split-Path -Parent "%1")"""'
这样传递给Python脚本的就是拆分后的两个参数,原脚本的参数判断逻辑(len(sys.argv)!=2)即可正常工作。
内容的提问来源于stack exchange,提问作者JPcoder
相关产品推荐
相关产品推荐

