Python 3长文件名作为参数(Python将其拆分)
在文件名较长的windows上获取命令行参数并将其传递给函数时,我遇到了一个问题 简言之,包含空格的长文件名被拆分为单独的部分 我编写了一段混在一起的代码,将命令行作为一个整体提供给我,但这远不是理想的,因为尽管它适用于多个参数,但不适用于带空格的LFN。 cludge是为一个不同的脚本制作的,我刚刚把它复制到这个脚本上 我在谷歌上搜索了几个小时,试图找出这个问题,因为肯定有人已经解决了这个问题。 我尝试过使用ArgParse,但也无法在不拆分文件名的情况下将其提供给我 请有人给我看一些代码,演示如何准确地获取命令行减去脚本名,同时获取完整的文件名 谢谢, 亚当 [编辑..] 我试着用引号括起来,但还是失败了。通过测试代码,我知道它会分割空格上的输入并删除引号。 来自不同测试的示例: test.py代码:Python 3长文件名作为参数(Python将其拆分),python,python-3.x,command-line,command-line-arguments,long-filenames,Python,Python 3.x,Command Line,Command Line Arguments,Long Filenames,在文件名较长的windows上获取命令行参数并将其传递给函数时,我遇到了一个问题 简言之,包含空格的长文件名被拆分为单独的部分 我编写了一段混在一起的代码,将命令行作为一个整体提供给我,但这远不是理想的,因为尽管它适用于多个参数,但不适用于带空格的LFN。 cludge是为一个不同的脚本制作的,我刚刚把它复制到这个脚本上 我在谷歌上搜索了几个小时,试图找出这个问题,因为肯定有人已经解决了这个问题。 我尝试过使用ArgParse,但也无法在不拆分文件名的情况下将其提供给我 请有人给我看一些代码,演
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
for x in range(0, len(sys.argv)):
print("->" + sys.argv[x])
输出:
H:\bin>test "test lfn.txt"
Number of arguments: 3 arguments.
Argument List: ['H:\\bin\\test.py', ' test', 'lfn.txt']
->H:\bin\test.py
-> test
->lfn.txt
[编辑2]
我认为这是Windows上的Python错误,因为双引号起作用,有点:
H:\bin>test ""test lfn.txt""
Number of arguments: 2 arguments.
Argument List: ['H:\\bin\\test.py', ' "test lfn.txt"']
->H:\bin\test.py
-> "test lfn.txt"
原始代码贴在下面。
我犯的错误是因为Windows7以前默认在编辑器中打开python文件,我在注册表中手动将其更改为使用python打开。通过在不同的机器上进行干净的安装,并让python安装程序设置路径等,它工作得很好。问题在于windows注册表设置。我们不知道您的输入是什么样子的。是否将命令行中的文件名括在引号内?如果没有,那么就这样做。否则,空格是参数分隔符-它与长度无关。您的第一个循环可以写成cmd=''.joinsys.arg[1:],但是如果文件名包含制表符,或者每个组件之间有两个空格,会发生什么情况?您的设计只能在仅使用一个空间的情况下工作。哪个编辑器?你的脚本是如何执行的?编辑是怎么运行的吗?如果其他人有相同的问题,这个答案没有提供足够的信息来解决问题,根据问题的性质,这可能是一个应该在编辑器中报告的错误。
###############################################################################
# Renames a single file to ISO date format: YYYYMMDD-HHMMSS #
###############################################################################
import datetime, os, sys
def error_filename():
print("filename doesn't exist maybe.")
sys.exit(1)
def error_args():
print("Renames a single file to ISO date format: YYYYMMDD-HHMMSS")
print("Requires 1 parameter, the filename to rename")
sys.exit(2)
def error_rename():
print("Unable to rename")
sys.exit(3)
cmds = ""
for x in range(1, len(sys.argv)):
cmds = cmds + sys.argv[x]
cmds = cmds.strip()
if cmds != "":
d = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
if os.path.isfile(cmds):
fn = cmds.split(os.extsep)
fn[0]=d
newname = d + "." + fn[1]
print(cmds + " -> " + newname)
try:
os.rename(cmds, newname)
except:
error_rename()
else:
error_filename()
else:
error_args()