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

  • 本文关键字:混合 文件名 python
  • 更新时间 :
  • 英文 :


我从这种格式的 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'

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

infilename = 'c:/mydir1/mydir2thedir3bigdir4123xyz.csv'

双重失败,因为 2 个字符被解释为"制表符"和"退格号"。

在处理文字 Windows 样式路径(或正则表达式)时,您必须使用原始前缀,更好的是规范化路径以摆脱斜杠。

infilename = os.path.normpath(r'c:/mydir1/mydir2mydir3mydir4123xyz.csv')

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

与其按解析,不如尝试按\解析。你通常必须通过转义,所以\字符实际上是\的。

最新更新