我在这样的列表中有完整的文件路径:
a = ['home/robert/Documents/Workspace/datafile.xlsx', 'home/robert/Documents/Workspace/datafile2.xls', 'home/robert/Documents/Workspace/datafile3.xlsx']
Run Code Online (Sandbox Code Playgroud)
我想要的是在没有扩展名的情况下获取NAMES文件,例如:
b = ['datafile', 'datafile2', 'datafile3']
Run Code Online (Sandbox Code Playgroud)
我试过的是:
xfn = re.compile(r'(\.xls)+')
for name in a:
fp, fb = os.path.split(fp)
ofn = xfn.sub('', name)
b.append(ofn)
Run Code Online (Sandbox Code Playgroud)
但它导致:
b = ['datafilex', 'datafile2', 'datafile3x']
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 28
你使用的正则表达式是错误的.(\.xls)+符合格式的字符串.xls,.xls.xls等等,这是为什么有剩余x的.xlsx项目.你想要的是\.xls.*,即.xls后跟零个或多个任何字符.
你真的不需要使用正则表达式.os.path中有一些专门的方法来处理这个:basename和splitext.
>>> import os.path
>>> os.path.basename('home/robert/Documents/Workspace/datafile.xlsx')
'datafile.xlsx'
>>> os.path.splitext(os.path.basename('home/robert/Documents/Workspace/datafile.xlsx'))[0]
'datafile'
Run Code Online (Sandbox Code Playgroud)
所以,假设您并不真正关心.xls/ .xlsxsuffix,您的代码可以像下面这样简单:
>>> a = ['home/robert/Documents/Workspace/datafile.xlsx', 'home/robert/Documents/Workspace/datafile2.xls', 'home/robert/Documents/Workspace/datafile3.xlsx']
>>> [os.path.splitext(os.path.basename(fn))[0] for fn in a]
['datafile', 'datafile2', 'datafile3']
Run Code Online (Sandbox Code Playgroud)
(还要注意列表理解.)
| 归档时间: |
|
| 查看次数: |
18775 次 |
| 最近记录: |