一条Python。目前,我有一个正在通过load\u workbook函数传递的工作簿名称列表。但是,我有一堆依赖于工作簿的if语句。所以我需要解析它们的名字或者找到另一种方法来检查工作簿。这是我的代码:
for x in range(0, len(allbooks)):
wb = openpyxl.load_workbook(allbooks[x], keep_vba = True)
print (wb)
if wb == "Subportfolio 1.xlsm":
ws = wb.worksheet("Positions")
if datetime.datetime.today().weekday() == 6: #check if its sunday
if ws.cells('D1') != "Price on %s" % last_friday: #check to see if date is last friday
print ("Need to Update Subportfolio")
elif ws.cells('D1') != "Price on %s" % d: #check to see if date is today
print ("Need to Update Subportfolio")
elif wb == "Mock Portfolio - He Yibo 2 (TMT).xlsm":
ws = wb.worksheet("Positions")
if datetime.datetime.today().weekday() == 6:
if ws.cells('E1') != "Price on %s" % last_friday:
print ("Need to Update Mock Portfolio - He Yibo 2 (TMT)")
elif ws.cells('E1') != "Price on %s" % d:
print ("Need to Update Mock Portfolio - He Yibo 2 (TMT)")
elif wb == "Mock Portfolio - He Yibo 2 (Utilities).xlsm":
ws = wb.worksheet("Positions")
if datetime.datetime.today().weekday() == 6:
if ws.cells('E1') != "Price on %s" % last_friday:
print ("Need to Update Mock Portfolio - He Yibo 2 (Utilities)")
elif ws.cells('E1') != "Price on %s" % d:
print ("Need to Update Mock Portfolio - He Yibo 2 (Utilities)")
第一部分并不是很像Python。在Python中,不需要索引来遍历列表。Python中的
for
在大多数其他语言中充当foreach,因此可以缩短成
^{pr2}$另一种改进方法是用dict或namedtuples替换所有
elif
语句。如果只是细胞发生了变化,你可以用dict很容易地做到这一点每个工作簿的更多参数
当每个工作簿有更多参数时,例如工作表名称,可以用几种方法来实现
命名成对
如果参数的数目是固定不变的,则namedtuple是一种非常方便的结构:
口是心非
这只不过是大致相同的。它使用
dict.get
方法,当dict中缺少键时,该方法接受默认参数班级
您可以创建一个MyWorkbookClass来保存每个工作簿的信息,但这样做可能有点过头了。
namedtuple
是一种具有固定成员的小类我没有使用过该模块,但我知道的是,这里有一种替代方法:
假设您的工作簿在同一个文件夹中,您可以使用
os
模块获取文件名列表。如下所示:然后,您可以解析
my_filenames
,并使用xlrd
模块按其名称打开所需的工作簿。当然,在这个模块中,索引的给出是不同的。在相关问题 更多 >
编程相关推荐