gpt4 book ai didi

python - 如何在原始模式下访问 sys.argv(或任何字符串变量)?

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:40 31 4
gpt4 key购买 nike

我在解析作为参数发送的文件路径时遇到困难:

如果我输入:

os.path.normpath('D:\Data2\090925')

我明白了

'D:\\Data2\x0090925'

显然文件夹名称中的\0 打乱了格式。我可以通过以下方式更正它:

os.path.normpath(r'D:\Data2\090925')

给出

'D:\\Data2\\090925'

我的问题是,如何使用 sys.argv 获得相同的结果?即:

os.path.normpath(sys.argv[1])

我找不到以原始模式将 sys.argv 馈送到 os.path.normpath() 以避免文件夹以零开头的问题的方法!

另外,我知道我可以用 python script.py D:/Data2/090925 来提供脚本,它会完美地工作,但不幸的是,windows 系统顽固地为我提供了'\',而不是 '/',所以我真的需要解决这个问题而不是避免它。

UPDATE1 补充:如果我使用脚本 test.py:

import os, sys 
if __name__ == '__main__':
print 'arg 1: ',sys.argv[1]
print 'arg 1 (normpath): ',os.path.normpath(sys.argv[1])
print 'os.path.dirname :', os.path.dirname(os.path.normpath(sys.argv[1]))

我得到以下信息:

C:\Python>python test.py D:\Data2\091002\ 
arg 1: D:\Data2\091002\
arg 1 (normpath): D:\Data2\091002
os.path.dirname : D:\Data2

即:我丢失了 091002...

UPDATE2:正如下面的评论告诉我的那样,当删除 normpath 时我给出的示例的问题已解决:

import os, sys 
if __name__ == '__main__':
print 'arg 1: ',sys.argv[1]
print 'os.path.dirname :', os.path.dirname(sys.argv[1])
print 'os.path.split(sys.argv[1])):', os.path.split(sys.argv[1])

给出:

 C:\Python>python test.py D:\Data2\091002\ 
arg 1: D:\Data2\091002\
os.path.dirname : D:\Data2\091002
os.path.split : ('D:\\Data2\\090925', '')

如果我使用 D:\Data2\091002 :

 C:\Python>python test.py D:\Data2\091002
arg 1: D:\Data2\091002
os.path.dirname : D:\Data2
os.path.split : ('D:\\Data2', '090925')

这是我可以使用的东西:谢谢!

最佳答案

“丢失”路径的最后一部分与 sys.argv 中的转义(或缺少转义)无关。

如果您使用 os.path.normpath() 然后使用 os.path.dirname(),这是预期的行为。

>>> import os
>>> os.path.normpath("c:/foo/bar/")
'c:\\foo\\bar'
>>> os.path.dirname('c:\\foo\\bar')
'c:\\foo'

关于python - 如何在原始模式下访问 sys.argv(或任何字符串变量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855477/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com