如何在反斜杠上使用python string split()?

时间:2017-07-30 08:37:25

标签: python regex

我正在尝试在文件路径中的最后一个目录之后命名一个文本文件。我需要能够获得使用前向或后向斜杠的操作系统的名称。我已经成功地将字符串split()方法用于正斜杠文件路径但不使用反斜杠。此外,当我尝试打印反斜杠目录名称时,不包括斜杠(可能读作转义序列);但是,当我使用re.search()方法时,它仍然会找到斜杠。

我该如何解决这个问题?

见下面的代码:

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()

链接显示我的控制台输出(我不允许显示嵌入图像......)

2 个答案:

答案 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“\”是   不是有效的字符串文字(即使是原始字符串也不能以奇数结尾)   反斜杠的数量)。具体来说,原始字符串不能以a结尾   单反斜杠(因为反斜杠会逃避以下引用   字符)。另请注意,单行反斜杠后跟换行符   解释为这两个字符作为字符串的一部分,而不是作为一个   延续线。

答案 1 :(得分:1)

我认为你比你需要的更努力。 Python有一个os模块,它具有完全按照您的需要执行的功能,与平台无关。在这里,您只需要使用

fileName=os.path.basename(targetDirectory)

另外,如果你正在使用Python,你应该认真考虑从骆驼案(fileName)转移到更多Pythonic蛇案(file_name)。