[英]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.