首页 > Python资料 博客日记
利用 Python 实现txt文本复杂数据处理与导出 Excel 文件
2024-07-13 09:00:04Python资料围观266次
简介: 在实际工作中,我们经常需要处理从各种来源获取的文本数据,并将其转换为结构化数据以便进一步分析和使用。本文将介绍如何使用 Python 对文本数据进行处理,并将处理结果保存到 Excel 文件中。
1. 问题背景: 在数据处理的实践中,从原始文本数据中提取关键信息并将其转换为结构化数据是一个常见的任务。例如,在教育行业,我们可能需要处理包含院校、专业和招生计划等信息的文本数据,以便进行统计分析或制作报表。
2. 代码解析: 我们提供了一个示例代码,其中包含了一个名为 process()
的函数。该函数接受多个列表作为参数,循环遍历这些列表并将数据转换为字典格式,最终使用 Pandas 库将字典转换为 DataFrame。然后,将 DataFrame 中的数据写入到 Excel 文件中。
3. 函数介绍: process()
函数接受多个参数,包括学校编码列表、院校名称列表、总计划列表、专业编码列表、专业名称列表、专业计划列表和学费列表。该函数将这些数据组合成字典,并转换为 DataFrame 格式。
4. 数据处理过程: 在示例代码中,我们使用了一个循环来遍历各个列表,并将对应位置的数据组合成字典。这样可以保证每个学校或专业的数据都被正确地提取和处理。最终,我们将这些字典组成的列表转换为 DataFrame,并将其写入到 Excel 文件中。
5. 实例演示:
import re
import pandas as pd
# 打开文件
with open('./txt/combined.txt', 'r', encoding='utf-8') as file:
# 逐行读取文件内容
lines = file.readlines()
# 初始化一个空列表,用于存储满足条件的行
selected_lines = []
sch_bsnall = []
sch_nameall = []
sch_numbers = []
sch_bsn = ''
sch_name = ''
sch_num = ''
zy_bsn = []
zy_name = []
zy_num = []
fee_numbers = []
fee_num = ''
index_list = []
ind = 1
temp = 0
# 遍历每一行
for line in lines:
parts = line.split()
# 检查行是否以两个数字开头
if parts[0].isdigit() and len(parts[0]) == 2:
# 如果是,则将该行添加到列表中
selected_lines.append(line.strip())
# 使用正则表达式模式匹配类似 "5000 元" 格式的数据
# pattern = r'\b\d+\s*元\b'
pattern = r'\d\d\d\d+'
# 使用 re.findall() 函数提取匹配到的数据
matches = re.findall(pattern, line.strip())
if len(sch_bsnall) - 1 >= 0:
if sch_bsnall[len(sch_bsnall) - 1] == sch_bsn:
index_list.append(ind)
else:
ind = ind + 1
index_list.append(ind)
else:
index_list.append(ind)
if len(matches) >= 1:
temp = 1
matchnum1 = matches[0].split()
fee_num = matchnum1[0]
fee_numbers.append(fee_num)
sch_bsnall.append(sch_bsn)
sch_nameall.append(sch_name)
sch_numbers.append(sch_num)
print(len(parts))
zy_bsn.append(parts[0])
if len(parts) >= 3:
if parts[2].isdigit():
zy_num.append(parts[2])
zy_name.append(parts[1])
else:
# 获取列表中的第二个字符
second_char = parts[1]
# 初始化一个空字符串,用于存储提取出的数字
extracted_digits = ''
# 遍历第二个字符的每个字符
for char in second_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
zy_name.append(parts[1].replace(extracted_digits, ""))
# 获取列表中的第三个字符
three_char = parts[2]
# 遍历第三个字符的每个字符
for char in three_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
zy_num.append(extracted_digits)
else:
# 获取列表中的第二个字符
second_char = parts[1]
# 初始化一个空字符串,用于存储提取出的数字
extracted_digits = ''
# 遍历第二个字符的每个字符
for char in second_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
if extracted_digits:
parts1 = parts[1].split(extracted_digits)
zy_name.append(parts1[0])
zy_num.append(extracted_digits)
else:
zy_name.append(parts[1])
zy_num.append('识别出错啦')
elif parts[0].isdigit() and len(parts[0]) >= 4:
sch_bsn = parts[0]
if len(parts) >= 3:
if parts[2].isdigit():
sch_num = parts[2]
sch_name = parts[1]
else:
# 获取列表中的第二个字符
second_char = parts[1]
# 初始化一个空字符串,用于存储提取出的数字
extracted_digits = ''
# 遍历第二个字符的每个字符
for char in second_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
sch_name = parts[1].replace(extracted_digits, "")
# 获取列表中的第三个字符
three_char = parts[2]
# 遍历第三个字符的每个字符
for char in three_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
sch_num = extracted_digits
else:
# 获取列表中的第二个字符
second_char = parts[1]
# 初始化一个空字符串,用于存储提取出的数字
extracted_digits = ''
# 遍历第二个字符的每个字符
for char in second_char:
# 判断字符是否为数字
if char.isdigit():
# 如果是数字,将其添加到提取的数字字符串中
extracted_digits += char
if extracted_digits:
parts1 = parts[1].split(extracted_digits)
sch_name = parts1[0]
sch_num = extracted_digits
else:
sch_name = parts[1]
sch_num = '识别出错啦'
else:
# 使用正则表达式模式匹配类似 "5000 元" 格式的数据
pattern = r'\b\d+\s*元\b'
# 使用 re.findall() 函数提取匹配到的数据
matches = re.findall(pattern, line.strip())
if len(matches) >= 1:
matchnum1 = matches[0].split()
fee_num = matchnum1[0]
temp = 0
newzy_num = []
for i in range(0, len(zy_num)):
parts = zy_num[i].split(fee_numbers[i])
newzy_num.append(parts[0])
def process(sch_bsnall,sch_nameall,sch_numbers,zy_bsn,zy_name,newzy_num,fee_numbers):
lis = []
for s in range(0, len(sch_bsnall)):
dic = {}
dic['校码'] = sch_bsnall[s]
dic['院校名称'] = sch_nameall[s]
dic['总计划'] = sch_numbers[s]
dic['专码'] = zy_bsn[s]
dic['专业名称'] = zy_name[s]
dic['专计划'] = newzy_num[s]
dic['学费(万)'] = fee_numbers[s]
lis.append(dic)
df = pd.DataFrame(lis)
return df
# 写入到excel文件
res = process(sch_bsnall,sch_nameall,sch_numbers,zy_bsn,zy_name,newzy_num,fee_numbers)
res.index = index_list
res.to_excel(r'C:\Users\Administrator\Desktop\1\image\2.xlsx', index=True)
6. 实现效果:
生成的excel文件
7. 总结: 本文介绍了利用 Python 对文本数据进行处理,并将处理结果保存到 Excel 文件的方法。通过示例代码和详细解释,读者可以了解到如何使用 Python 和 Pandas 库来处理和导出数据,从而更加高效地应对实际工作中的数据处理需求。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程