Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3长文件名作为参数(Python将其拆分)_Python_Python 3.x_Command Line_Command Line Arguments_Long Filenames - Fatal编程技术网

Python 3长文件名作为参数(Python将其拆分)

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,但也无法在不拆分文件名的情况下将其提供给我 请有人给我看一些代码,演

在文件名较长的windows上获取命令行参数并将其传递给函数时,我遇到了一个问题

简言之,包含空格的长文件名被拆分为单独的部分

我编写了一段混在一起的代码,将命令行作为一个整体提供给我,但这远不是理想的,因为尽管它适用于多个参数,但不适用于带空格的LFN。 cludge是为一个不同的脚本制作的,我刚刚把它复制到这个脚本上 我在谷歌上搜索了几个小时,试图找出这个问题,因为肯定有人已经解决了这个问题。 我尝试过使用ArgParse,但也无法在不拆分文件名的情况下将其提供给我

请有人给我看一些代码,演示如何准确地获取命令行减去脚本名,同时获取完整的文件名

谢谢, 亚当

[编辑..] 我试着用引号括起来,但还是失败了。通过测试代码,我知道它会分割空格上的输入并删除引号。 来自不同测试的示例:

test.py代码:

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()