这一句Python代码哪里错了?
本帖最后由 13832811375 于 2020-10-4 14:52 编辑初学Python,正在码墙,遇上个问题,代码如下:
import xlwings as xw
import pandas as pd
import os;import re
app=xw.App(visible=False,add_book=False)
file_path=r'D:\MyData\MyDesk\Test0930'
file_lists=os.listdir(file_path)
for f in file_lists:
if str(re.findall('\.(x.*$)', f)) not in ['xls','xlsx']: # 我这一句的意思是过滤掉所有扩展名第一个字母不是“x”的文件
print(str(re.findall('\.(x.*$)', f))) # 打印显示上一句是正确的
continue # 实际运行发现,所有的文件都被过滤掉了,并没有到下一句打开Excel文件
wb=app.books.open(file_path+'/'+f) #
ws=wb.sheets[0]
有一起想研究Python在Excel里的应用的吗?加好友
continue:表示终止当前循环,开始下一次循环 cangyue0609 发表于 2020-10-4 15:00
continue:表示终止当前循环,开始下一次循环
怎么改呢?我是说一定要用正则的话,不用正则有个简单写法:
if not (f.endswith('.xls') or f.endswith('.xlsx')):
continue
wb=app.books.open(file_path+'/'+f)
你可以用split(".")[-1],把扩展名分割出来,然后再用startswith方法来过滤 应该是缩进没搞对
for f in file_lists:
if str(re.findall('\.(x.*$)', f)) not in ['xls','xlsx']:
print(str(re.findall('\.(x.*$)', f)))
wb=app.books.open(file_path+'/'+f)
ws=wb.sheets 这个不是小助手的感觉么?难道有什么实际应用场景?
findall返回的是list,改成re.findall('\.(x.*$)', f) ,直接返回的就是字符,去掉str if str(re.findall('\.(x.*$)', f)) not in ['xls','xlsx']: # 我这一句的意思是过滤掉所有扩展名第一个字母不是“x”的文件
这句,比如有1.xls, 2123.xlsx...,等,然后你这个是获取扩展名的,如果你要前面文件名的话
'.*\.(x.*$)'
试试这个 牧灵 发表于 2020-10-4 15:34
你可以用split(".")[-1],把扩展名分割出来,然后再用startswith方法来过滤
这个方法比较好! 川黔 发表于 2020-10-4 16:10
应该是缩进没搞对
for f in file_lists:
No!焦点错误,你关注的不是问题所在哦
页:
[1]
2