簡體   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