按反斜杠分割字符串
我正在尝试把一个路径分开,以便获取文件名,也就是字符串的最后一部分,但遇到了一个我解决不了的问题:
我的字符串是: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文件或者数据库(这也是推荐的做法),你就不会遇到这个问题了。