24.Python-pattern匹配列表中的值

该Python脚本读取一个Excel文件,使用正则表达式查找以J开头的行,并将这些行的数据转换为新的Excel文件。它遍历工作表的每一行和每一列,检查单元格值,对日期格式进行转换,并将结果保存到输出文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.行中的值属于某个特定模式

vi 6excel_value_matches_pattern.py 
#encoding=utf8
#!/usr/bin/env python3 
import re 
import sys 
from datetime import date 
from xlrd import open_workbook,xldate_as_tuple
from xlwt import Workbook
input_file=sys.argv[1]
output_file=sys.argv[2]
output_workbook=Workbook()
output_worksheet=output_workbook.add_sheet('jan_2013_output')
pattern=re.compile(r'(?P<my_pattern>^J.*)') #以J开头的行。
customer_name_column_index=1 
with open_workbook(input_file) as workbook:
	worksheet=workbook.sheet_by_name('january_2013')
	data=[] 
	header=worksheet.row_values(0)
	data.append(header)
	for row_index in range(1,worksheet.nrows):
		row_list=[]
		if pattern.search(worksheet.cell_value(row_index,customer_name_column_index)): 
		#[1,1],[2,1],[3,1],[4,1] 如果有J开头的行,每行先循环第一列。
			for column_index in range(worksheet.ncols):
				cell_value=worksheet.cell_value(row_index,column_index)
				cell_type=worksheet.cell_type(row_index,column_index)
				if cell_type==3:
					date_cell=xldate_as_tuple(cell_value,workbook.datemode)
					date_cell=date(*date_cell[0:3]).strftime('%m/%d/%Y')
					row_list.append(date_cell)
				else:
					row_list.append(cell_value)
		if row_list:
			data.append(row_list)
	for list_index,output_list in enumerate(data):
		for element_index,element in enumerate(output_list):
			output_worksheet.write(list_index,element_index,element)
output_workbook.save(output_file) #保存到输出文件。

#结果 	
 
python3  6excel_value_matches_pattern.py sales_2013.xls 16output.xls 
more 16output.xls 
Customer ID	Customer Name	Invoice Number	Sale Amount	Purchase Date
1234	John Smith	100-0002	1200	1/1/2014
5678	Jenny Walters	100-0006	1725	1/24/2014

2.总结

pattern=re.compile(r'(?P<my_pattern>^J.*)') #以J开头的行
worksheet.ncols #sheet对象的列数
worksheet.nrows #sheet对象的行数
worksheet.cell_value #格子的值
worksheet.cell_type #格子值的类型
worksheet.row_values(0) #第一行 
workbook.sheet_by_name('january_2013') #根据名称筛选sheet; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值