【问题标题】:How to use windows file paths in Python __doc__如何在 Python __doc__ 中使用 windows 文件路径
【发布时间】:2012-08-20 18:06:26
【问题描述】:

我想在我的__doc__ 使用字符串中给我的用户一个例子。以下是与我的问题相关的代码的重要部分。

# jmetadata.py
'''
usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\\\Hal\\hal free agent 1\\backups\\videos\\" out.txt
'''

<...deleted code...>

def forPyWinTests():
    jmetadata("\\\\Hal\\hal free agent 1\\backups\\videos\\", "out.txt")

NUM_ARGS = 2
def main():
    args = sys.argv[1:]
    print args
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args:
        print __doc__
        sys.exit(2)
    jmetadata(args[0], args[1])

if __name__ == '__main__':
    main()
    # print()
    # forPyWinTests()

我预计这种行为:

>jmetadata.py
[]

usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt


>

但是,当我将示例复制到命令行时,我希望程序能够运行。相反,我得到:

>jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt
['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt']

usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt

请注意上面的第二行。这是由main() 中的print args 命令产生的。就是说 args 列表只有 1 个元素 ['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt'],而不是 2。这对我来说没有意义。

我通过编写一个 Windows .cmd 文件进行了更多调查。这是show_args.cmd:

rem show_args.cmd
echo %1 
echo %2

这是运行的结果:

>show_args.cmd "\\Hal\hal free agent 1\backups\videos\" out.txt

>rem show_args.cmd

>echo "\\Hal\hal free agent 1\backups\videos\"
"\\Hal\hal free agent 1\backups\videos\"

>echo out.txt
out.txt

Windows 似乎将项目分开。我难住了。有谁知道这里发生了什么?

我希望有人能分享一些见解。提前致谢。

【问题讨论】:

  • 您是否尝试通过 python 调用:python jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt ?
  • 感谢神人的回复。我已经做了。它会导致相同的行为:&gt;python jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt ['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt'] usage: jmetadata.py inDirPath outFilePath example: jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt &gt;

标签: python windows filepath docstring


【解决方案1】:

尝试删除尾部反斜杠。改变这个:

jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt

到这里:

jmetadata.py "\\Hal\hal free agent 1\backups\videos" out.txt

在上面的测试运行中,Python 看到的参数是:

['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt']

尾随的退格被解释为转义字符,因为它紧接在 " 之前,这会将您的参数转换为单个字符串(或直到遇到未转义的 ")。

【讨论】:

  • 谢谢瑞恩。塔尔成功了。以前我尝试制作__doc__ 示例:jmetadata.py "\\\\Hal\\hal free agent 1\\backups\\videos\\" out.txt。这在末尾增加了一个空间。这不起作用,因为我正在做 os.listdir(args[0])。它产生:... for filename in os.listdir(inDirPath): WindowsError: [Error 3] The system cannot find the path specified: '\\\\Hal\\hal free agent 1\\backups\\videos\\ /*。*' 谢谢您的帮助。爱与和平,-乔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2021-09-18
  • 2019-09-23
  • 2017-12-17
  • 1970-01-01
相关资源
最近更新 更多