我从api获取包含/
和\
混合的格式的文件名。
infilename ='c:/ mydir1 / mydir2 \ mydir3 \ mydir4 \ 123xyz.csv'
当我尝试解析目录结构时,\
后跟一个字符将转换为单个字符。
有没有办法让每个组件正确?
我已经尝试过:
path.normpath didn't help.
infilename = 'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv'
os.path.normpath(infilename)
out:
'c:\\mydir1\\mydir2\\mydir3\\mydir4Sxyz.csv'
答案 0 :(得分:1)
在你的例子中看不到,但写下这个:
infilename = 'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv'
不是一个好主意,因为如果遵循反斜杠,一些小写(和几个大写)字母会被解释为转义序列。臭名昭着的例子是\t
,\b
,还有其他例子。例如:
infilename = 'c:/mydir1/mydir2\thedir3\bigdir4\123xyz.csv'
加倍失败,因为2个字符被解释为" tab"和"退格"。
在处理文字的Windows样式路径(或正则表达式)时,必须使用 raw 前缀,更好地规范化路径以消除斜杠。
infilename = os.path.normpath(r'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv')
但是,原始前缀仅适用于文字。如果显示返回的字符串,则在打印repr(string)
时,'the\terrible\\dir'
,然后标签字符已经放入字符串中,除了糟糕的后期处理之外,您无能为力。< / p>
答案 1 :(得分:0)
在字符串之前使用r将其作为原始字符串处理(即没有字符串格式化)。
e.g。
infilename = r'C:/blah/blah/blah.csv'
此处有更多详情: https://docs.python.org/3.6/reference/lexical_analysis.html#string-and-bytes-literals
答案 2 :(得分:0)
而不是按\
解析而不是\\
解析。您通常必须\
转义,因此\字符实际上是\\
。