我从这种格式的 api 获取文件名,其中包含/
和的混合。
infilename = 'C:/mydir1/mydir2\mydir3\mydir4\123xyz.csv'
当我尝试解析目录结构时,后跟一个字符被转换为单个字符。
有没有办法正确获取每个组件?
我已经尝试过:
path.normpath didn't help.
infilename = 'c:/mydir1/mydir2mydir3mydir4123xyz.csv'
os.path.normpath(infilename)
out:
'c:\mydir1\mydir2\mydir3\mydir4Sxyz.csv'
字符串之前使用 r 将其处理为原始字符串(即没有字符串格式)。
例如
infilename = r'C:/blah/blah/blah.csv'
更多细节在这里:https://docs.python.org/3.6/reference/lexical_analysis.html#string-and-bytes-literals
示例中不可见,但编写以下内容:
infilename = 'c:/mydir1/mydir2mydir3mydir4123xyz.csv'
这不是一个好主意,因为如果遵循反斜杠,则某些小写(和一些大写)字母将被解释为转义序列。臭名昭著的例子t
,b
,还有其他例子。例如:
infilename = 'c:/mydir1/mydir2thedir3bigdir4123xyz.csv'
双重失败,因为 2 个字符被解释为"制表符"和"退格号"。
在处理文字 Windows 样式路径(或正则表达式)时,您必须使用原始前缀,更好的是规范化路径以摆脱斜杠。
infilename = os.path.normpath(r'c:/mydir1/mydir2mydir3mydir4123xyz.csv')
但是,原始前缀仅适用于文本。如果返回的字符串出现,则在打印时repr(string)
,如 'theterrible\dir'
,则制表符已经放入字符串中,除了糟糕的后期处理外,您无能为力。
与其按解析,不如尝试按
\
解析。你通常必须通过转义,所以\字符实际上是
\
的。