Python:无法处理作为脚本参数提供的 Windows 路径
Python: can't process Windows path provided as script argument
我正在尝试编写一个小 python 脚本来修复我的视频的捕获日期。
我正在使用 Windows,我想使用“发送到”功能。
到目前为止,我只是试图根据命令行参数获取视频文件列表:
import argparse
import os
vidExtension = "mp4"
def getVideoFiles(fileFolders):
files=[]
folders=[]
# Create list of folders and files from command line arguments
for arg in fileFolders:
curpath = os.path.normpath(arg)
print(curpath, os.path.isdir(curpath))
if os.path.isdir(curpath):
folders.append(curpath)
elif os.path.isfile(curpath):
if curpath.lower().endswith(vidExtension):
files.append(curpath)
else:
print("Unrecognized arg: " + arg + "\n normpath: " + curpath)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Process video files')
parser.add_argument('foldersFiles', type=ascii, nargs='+',
help='Folders/Files to process')
args = parser.parse_args()
print(args.foldersFiles)
getVideoFiles(args.foldersFiles)
启动脚本时(右键单击 SendTo...),这是我得到的输出:
args.foldersFiles: ["'D:\\Synchro NAS\\Images\\Photos Num\xe9riques\\A Trier\\2020\\z Videos\\temp'", "'D:\\Synchro NAS\\Images\\Photos Num\xe9riques\\A Trier\\2020\\z Videos\\00047.mp4'"]
'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos\temp' isdir: False isfile: False
Unrecognized arg: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier\2020\z Videos\temp'
normpath: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos\temp'
'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos[=13=]047.mp4' isdir: False isfile: False
Unrecognized arg: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier\2020\z Videos\00047.mp4'
normpath: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos[=13=]047.mp4'
无法识别文件和文件夹。
我使用 os.path.normpath 来规范化路径,但它不起作用...
一个重要的注意是我在路径字符串中有重音:
真正的路径是:D:\Synchro NAS\Images\Photos Numériques\A Trier20\z Videos
有人可以帮我吗:)!
在 add_argument
中调用 type
参数设置为 ascii
调用 ascii
函数将传入的字符串转换为自身的表示形式(类似于 repr()
),转义反斜杠和非 ascii 字符。
无法将此表示作为路径正确处理。
解决方法:省略调用中的type=ascii
。
我正在尝试编写一个小 python 脚本来修复我的视频的捕获日期。 我正在使用 Windows,我想使用“发送到”功能。
到目前为止,我只是试图根据命令行参数获取视频文件列表:
import argparse
import os
vidExtension = "mp4"
def getVideoFiles(fileFolders):
files=[]
folders=[]
# Create list of folders and files from command line arguments
for arg in fileFolders:
curpath = os.path.normpath(arg)
print(curpath, os.path.isdir(curpath))
if os.path.isdir(curpath):
folders.append(curpath)
elif os.path.isfile(curpath):
if curpath.lower().endswith(vidExtension):
files.append(curpath)
else:
print("Unrecognized arg: " + arg + "\n normpath: " + curpath)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Process video files')
parser.add_argument('foldersFiles', type=ascii, nargs='+',
help='Folders/Files to process')
args = parser.parse_args()
print(args.foldersFiles)
getVideoFiles(args.foldersFiles)
启动脚本时(右键单击 SendTo...),这是我得到的输出:
args.foldersFiles: ["'D:\\Synchro NAS\\Images\\Photos Num\xe9riques\\A Trier\\2020\\z Videos\\temp'", "'D:\\Synchro NAS\\Images\\Photos Num\xe9riques\\A Trier\\2020\\z Videos\\00047.mp4'"]
'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos\temp' isdir: False isfile: False
Unrecognized arg: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier\2020\z Videos\temp'
normpath: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos\temp'
'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos[=13=]047.mp4' isdir: False isfile: False
Unrecognized arg: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier\2020\z Videos\00047.mp4'
normpath: 'D:\Synchro NAS\Images\Photos Num\xe9riques\A Trier20\z Videos[=13=]047.mp4'
无法识别文件和文件夹。 我使用 os.path.normpath 来规范化路径,但它不起作用...
一个重要的注意是我在路径字符串中有重音: 真正的路径是:D:\Synchro NAS\Images\Photos Numériques\A Trier20\z Videos
有人可以帮我吗:)!
在 add_argument
中调用 type
参数设置为 ascii
调用 ascii
函数将传入的字符串转换为自身的表示形式(类似于 repr()
),转义反斜杠和非 ascii 字符。
无法将此表示作为路径正确处理。
解决方法:省略调用中的type=ascii
。