按反斜杠分割字符串

1 投票
3 回答
4364 浏览
提问于 2025-04-30 02:56

我正在尝试把一个路径分开,以便获取文件名,也就是字符串的最后一部分,但遇到了一个我解决不了的问题:

我的字符串是: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']

但我无法准确得到这个。

附注:像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 个回答

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上运行也能正常工作:

print ntpath.splitext(ntpath.basename(te))[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
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文件或者数据库(这也是推荐的做法),你就不会遇到这个问题了。

撰写回答