在文件名

时间:2017-02-02 21:00:04

标签: python

我从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'

3 个答案:

答案 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)

而不是按\解析而不是\\解析。您通常必须\转义,因此\字符实际上是\\