2017-07-30 178 views
1

我想在文件路徑中的最後一個目錄之後命名文本文件。我需要能夠得到這個名稱的操作系統的使用向前或向後的斜槓。我已經成功地將字符串split()方法用於正斜槓文件路徑,但不是反斜槓。另外,當我嘗試打印反斜槓目錄名稱時,不包括斜槓(可能讀作轉義序列);然而,當我使用re.search()方法時,它仍然會找到斜槓。如何在反斜槓上使用Python字符串split()?

我該如何解決這個問題?

見下面的代碼:

import re 
import sys 

targetDirectory = sys.argv[1] 
filePathDirectorySeparator = '' 
usesForwardSlashSeparator = re.search('/', targetDirectory) 
if(usesForwardSlashSeparator): 
    filePathDirectorySeparator = '/' 
else: 
    filePathDirectorySeparator = '\\' 

fileName = targetDirectory.split(filePathDirectorySeparator)[-1] 
file = open(fileName, 'w+') 
file.write('HELLO') 
file.close() 

的鏈接顯示我的控制檯輸出(我不能嵌入圖像但顯然...)

+0

我沒有看到鏈接,所以我已經上傳到imgur:http://imgur.com/a/ijLgK –

+0

我猜你的shell正在解釋反斜槓,所以他們從來沒有出現在' sys.argv'在Python中。你可以嘗試在命令行上逃脫它們嗎? – Blckknght

+0

查看[os.path](https://docs.python.org/3/library/os.path.html),並注意您也可以在Windows路徑中使用正斜槓。 –

回答

1

我想你想難度比你需要。Python有一個os模塊具有福nction做你想要的東西,獨立於平臺。在這裏,你只需要使用

fileName=os.path.basename(targetDirectory) 

另外,如果你在使用Python,你應該認真考慮移動駝情況下(fileName)客場更Python蛇的情況下(file_name)。

+0

加上一個注意駱駝案件! –

+0

謝謝你的幫助! –

2

一個小例子,

>>> print s 
this/hello\ 
>>> import re 
>>> re.split('/',s) 
['this', 'hello\\'] 
>>> re.split('\\',s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 171, in split 
    return _compile(pattern, flags).split(string, maxsplit) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 251, in _compile 
    raise error, v # invalid expression 
sre_constants.error: bogus escape (end of line) 
>>> re.split(r'\\',s) 
['this/hello', ''] 
'

'r'前綴事項!

Reference

即,

當「R」或「R」前綴存在時,下面的一個 反斜線字符被包括而不改變字符串中,並且所有 反斜槓留在的字符串中。例如,字符串文字 r「\ n」由兩個字符組成:反斜槓和小寫「n」。 字符串引號可以使用反斜線進行轉義,但反斜槓 保留在字符串中;例如,r「\」「是一個有效的字符串文字 ,由兩個字符組成:反斜槓和雙引號; r」\「是 不是有效的字符串文字(即使原始字符串不能以奇數 特別是原始字符串不能以 單個反斜槓結尾(因爲反斜槓將轉義爲下面的報價 字符)。還要注意,一個反斜槓後跟一個換行符 被解釋爲字符串中的兩個字符,而不是作爲一個 續行。

+0

請引用一下。如果該鏈接發生變化,該解釋將變得毫無用處,因此請始終在發佈的任何鏈接中添加相關代碼段。 – Soviut

+0

是的,當然。謝謝! –

+0

謝謝你的幫助! –