我正在尝试拆分路径以获取文件的名称,字符串的最后一部分,我正在处理一个我无法解决的问题:
我的字符串: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
答案 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]