Python处理excel数据(以简单案例参考)
感兴趣的小伙伴可根据结果的cvs自行创建文件,跑一跑代码
案例内容
1、搭建环境
2、将csv文件转化为excel文件存储
3、将原excel文件的表中想要提取的内容提取并复制到目标表中
4、从目标表的每行内容中,通过正则匹配获取信息
5、对于重复的内容,去重后计数
实战训练
1、搭建环境
Python 3.8.13
pip install pandas
pip install openpyxl
2、将csv文件转化为excel文件存储
def csv_to_xlsx_pd(new_path):
csv = pd.read_csv(csv_path, encoding='ANSI') # encoding: 防止乱码(可通过打开方式——>记事本查看编码方式)
csv.to_excel(new_path, sheet_name='data') # sheet_name可自定义
3、将原excel文件的表中想要提取的某行某列的内容进行提取,并复制到目标表中
# 从源excel表中提取信息复制到目标表中
def copy(new_path, sheet_name, new_tab, colu):
my_excel = openpyxl.load_workbook(new_path)
src_sheet = my_excel[sheet_name] # 要复制的表
dest_sheet = my_excel.create_sheet(new_tab) # 创建新表
# dest_sheet = my_excel['omc_ip']
# 提取某一行某一列的全部数据
for i in range(1, src_sheet.max_row+1):
# for j in range(1, src_sheet.max_column+1):
dest_sheet.cell(row=i, column=colu).value = src_sheet.cell(row=i, column=colu).value
my_excel.save(new_path)
4、从目标表的某列内容中,通过正则匹配获取信息
# 从excel中正则匹配ip
def get_ip(new_path, sh_name):
df = pd.read_excel(new_path, sheet_name= sh_name) # read_excel_path
contents = list(df['任务名'])
date = []
for i in range(0, len(contents)):
# 循环,提取第i行的内容
content = contents[i]
# 正则表达式提取内容关键字
# results = re.findall(r'\d+\.\d+\.\d+\.\d+', content) # # IP地址
results = re.findall(r'\d{11}', content) # 手机号(此处皆为随机11位数字,具体以实际情况为准)
try:
result = results[0]
except:
result = ''
# 关键字增加进行
date.append(result)
# 写入行
df['ip_new'] = date
df[['ip_new', '任务名']] = df[['任务名', 'ip_new']] # 两行互换
df.columns = ['IP', '任务名'] # 变更表头
# 写入excel结果文件
df.to_excel(new_path, sheet_name=sh_name, index=False)
5、对于重复的内容,去重,并计数
def remove_count(excel_open_path, new_ex):
# excel_open_path = r'C:\Users\Desktop\target.xlsx'
# new_ex = r'C:\Users\Desktop\tar.xlsx'
xlsx = pd.read_excel(excel_open_path, sheet_name='sheet2')
all_data = []
# 读物行的内容
for i in range(1, len(xlsx) - 1):
# if i > 8:
# break
data = xlsx.loc[i].values # 读取前XX行内容
all_data.append(data[0])
#
res = []
ex_dict = {}
for j in all_data:
ex_dict[j] = all_data.count(j) # IP计数
# # 去除重复项后计数——>建表
# # new_ex = r'C:\Users\Desktop\python_测试\bb.xlsx'
df = pd.DataFrame(list(ex_dict.items()))
df.columns = ['IP', 'COUNT']
# 删除缺失值
df.dropna(inplace=True)
df.sort_values(by='COUNT', inplace=True, ascending=False) # 根据COUNT降序
df.to_excel(new_ex, index=False)
# remove_count(r'C:\Users\Desktop\target.xlsx')
6、运行代码
if __name__ == '__main__':
new_path = r'C:\Users\Desktop\target.xlsx'
last_path = r'C:\Users\Desktop\tar.xlsx'
csv_to_xlsx_pd(new_path) # csv转化为xlsx
copy(new_path, 'data', 'sheet1', 1) # 复制第一列多行内容到目标表中:'data'来自转化后表名
get_ip(new_path, 'sheet1') # 获取每行中待匹配的信息
copy(new_path, 'sheet1', 'sheet2', 1)
remove_count(r'C:\Users\Desktop\target.xlsx', r'C:\Users\Desktop\tar.xlsx')
案例结果展示
1、csv文件内容
2、最终结果