繁体   English   中英

解析文件名中反斜杠和正斜杠的混合

[英]Parsing a mix of Backward slash and forward slash in a filename

我正在以包含/\\混合格式从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'

在您的示例中不可见,但编写如下代码:

infilename = 'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv'

这不是一个好主意,因为如果使用反斜杠,则某些小写(和一些大写)字母将被解释为转义序列。 臭名昭著的例子是\\t\\b ,还有其他。 例如:

infilename = 'c:/mydir1/mydir2\thedir3\bigdir4\123xyz.csv'

双重失败,因为2个字符被解释为“ tab”和“ backspace”。

在处理原义Windows风格的路径(或正则表达式)时,您必须使用原始前缀,更好的是规范化路径以消除斜线。

infilename = os.path.normpath(r'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv')

但是,原始前缀仅适用于文字 如果出现返回的字符串,则在打印repr(string) ,以'the\\terrible\\\\dir' ,则制表符已经放入了字符串中,除了糟糕的后处理之外,您无能为力。

在字符串之前使用r将其作为原始字符串处理(即,不格式化字符串)。

例如

infilename = r'C:/blah/blah/blah.csv'

此处有更多详细信息: https : //docs.python.org/3.6/reference/lexical_analysis.html#string-and-bytes-literals

而不是通过\\解析,请尝试通过\\\\解析。 通常,您必须使用\\进行转义,因此\\字符实际上是\\\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM