用反斜杠拆分字符串

时间:2014-10-28 09:42:25

标签: python string split backslash

我正在尝试拆分路径以获取文件的名称,字符串的最后一部分,我正在处理一个我无法解决的问题:

我的字符串:te = 'C:\Users\Desktop\TEST\Excel_Reports\1837.xlsx'

我做到了:

>>> te.split('\\')
['C:', 'Users', 'Desktop', 'TEST', 'Excel_Reports\x01837.xlsx']

>>> te.split('\\')[-1]
'Excel_Reports\x01837.xlsx'

我不知道\0\number有什么问题....是否有任何特殊的Python角色?

以下是我想要的内容:

['C:', 'Users', 'Desktop', 'TEST', 'Excel_Reports', '1837.xlsx']

但我无法得到这个。

PD:不是像file_name = te [-5:-1]这样的有效解决方案,因为excel文件的名称可以随时变化,但总是数字。

编辑: 显示我的收视方式te

folder = QtGui.QFileDialog.getExistingDirectory(None, "Load excel")

for f in os.listdir(folder):
    if f.endswith(".xlsx"):
        te= os.path.join(str(folder),str(f))
        #bla, bla, bla,......

编辑:

感谢所有的答案和评论,他们指出了正确的方向。

但是,我只是通过替换这一行解决了这个问题:

te= os.path.join(str(folder),str(f))

这个:

te = os.path.join(folder,f)

然后,这有效:

te.split('\\')[-1].split('.')[0]

给出没有扩展名xlsx

的文件的名称(编号)

3 个答案:

答案 0 :(得分:4)

假设您有正确的路径,那么:

import os

# Note that we're using the **r** prefix to make it a raw string - backslashes don't escape  
path = r'C:\Users\Desktop\TEST\Excel_Reports\1837.xlsx'
print os.path.split(path)[1]
# 1837.xlsx

然后您还可以进一步拆分以获取文件名的基础,例如:

print os.path.splitext(os.path.split(path)[1])[0]
# 1837

答案 1 :(得分:3)

您需要为te创建一个原始字符串

的文字
>>> te = r'C:\Users\Desktop\TEST\Excel_Reports\1837.xlsx'
>>> import os
>>> te.split("\\") # can't use os.path.sep as my repl is on linux
['C:', 'Users', 'Desktop', 'TEST', 'Excel_Reports', '1837.xlsx']

这是由于python文字字符串的语法。 \g\n\t等也会造成问题。其他斜杠不会需要进行转义,因为后面的字符不是有效的转义序列 - 但它会让人感到困惑。最好使用原始字符串语法

如果你从源文件以外的某个地方获得te,例如ini文件或数据库(如你所愿),你甚至都不会看到这个问题。

答案 2 :(得分:1)

您可以完全避免使用str.split,仅使用os.path个功能:

te = r'C:\Users\Desktop\TEST\Excel_Reports\1837.xlsx'
print os.path.splitext(os.path.basename(te))[0]

如果您事先知道要解析Windows路径,最好使用npath - os.path模块的Windows风格,因此即使在Linux上运行,您的代码也可以完成它的工作:< / p>

print ntpath.splitext(ntpath.basename(te))[0]