Ale*_*reS 1 python string-literals
我在解析作为参数发送的文件路径时遇到困难:
如果我输入:
os.path.normpath('D:\Data2\090925')
Run Code Online (Sandbox Code Playgroud)
我明白了
'D:\\Data2\x0090925'
Run Code Online (Sandbox Code Playgroud)
显然文件夹名称中的\ 0正在扰乱格式化.我可以通过以下方式纠正它:
os.path.normpath(r'D:\Data2\090925')
Run Code Online (Sandbox Code Playgroud)
这使
'D:\\Data2\\090925'
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何使用sys.argv实现相同的结果?即:
os.path.normpath(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)
我找不到一种方法,可以将原始模式下的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]))
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
C:\Python>python test.py D:\Data2\091002\
arg 1: D:\Data2\091002\
arg 1 (normpath): D:\Data2\091002
os.path.dirname : D:\Data2
Run Code Online (Sandbox Code Playgroud)
即:我输了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])
Run Code Online (Sandbox Code Playgroud)
这使:
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', '')
Run Code Online (Sandbox Code Playgroud)
如果我使用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')
Run Code Online (Sandbox Code Playgroud)
这是我可以使用的东西:谢谢!
"失去"你路径的最后一部分与逃避(或缺乏)无关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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |