|
简介:在实际工作中,我们经常需要处理从各种来源获取的文本数据,并将其转换为结构化数据以便进一步分析和使用。本文将介绍如何使用Python对文本数据进行处理,并将处理结果保存到Excel文件中。1.问题背景:在数据处理的实践中,从原始文本数据中提取关键信息并将其转换为结构化数据是一个常见的任务。例如,在教育行业,我们可能需要处理包含院校、专业和招生计划等信息的文本数据,以便进行统计分析或制作报表。2.代码解析:我们提供了一个示例代码,其中包含了一个名为process()的函数。该函数接受多个列表作为参数,循环遍历这些列表并将数据转换为字典格式,最终使用Pandas库将字典转换为DataFrame。然后,将DataFrame中的数据写入到Excel文件中。3.函数介绍:process()函数接受多个参数,包括学校编码列表、院校名称列表、总计划列表、专业编码列表、专业名称列表、专业计划列表和学费列表。该函数将这些数据组合成字典,并转换为DataFrame格式。4.数据处理过程:在示例代码中,我们使用了一个循环来遍历各个列表,并将对应位置的数据组合成字典。这样可以保证每个学校或专业的数据都被正确地提取和处理。最终,我们将这些字典组成的列表转换为DataFrame,并将其写入到Excel文件中。5.实例演示:importreimportpandasaspd#打开文件withopen('./txt/combined.txt','r',encoding='utf-8')asfile:#逐行读取文件内容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=1temp=0#遍历每一行forlineinlines:parts=line.split()#检查行是否以两个数字开头ifparts[0].isdigit()andlen(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())iflen(sch_bsnall)-1>=0:ifsch_bsnall[len(sch_bsnall)-1]==sch_bsn:index_list.append(ind)else:ind=ind+1index_list.append(ind)else:index_list.append(ind)iflen(matches)>=1:temp=1matchnum1=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])iflen(parts)>=3:ifparts[2].isdigit():zy_num.append(parts[2])zy_name.append(parts[1])else:#获取列表中的第二个字符second_char=parts[1]#初始化一个空字符串,用于存储提取出的数字extracted_digits=''#遍历第二个字符的每个字符forcharinsecond_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charzy_name.append(parts[1].replace(extracted_digits,""))#获取列表中的第三个字符three_char=parts[2]#遍历第三个字符的每个字符forcharinthree_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charzy_num.append(extracted_digits)else:#获取列表中的第二个字符second_char=parts[1]#初始化一个空字符串,用于存储提取出的数字extracted_digits=''#遍历第二个字符的每个字符forcharinsecond_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charifextracted_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('识别出错啦')elifparts[0].isdigit()andlen(parts[0])>=4:sch_bsn=parts[0]iflen(parts)>=3:ifparts[2].isdigit():sch_num=parts[2]sch_name=parts[1]else:#获取列表中的第二个字符second_char=parts[1]#初始化一个空字符串,用于存储提取出的数字extracted_digits=''#遍历第二个字符的每个字符forcharinsecond_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charsch_name=parts[1].replace(extracted_digits,"")#获取列表中的第三个字符three_char=parts[2]#遍历第三个字符的每个字符forcharinthree_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charsch_num=extracted_digitselse:#获取列表中的第二个字符second_char=parts[1]#初始化一个空字符串,用于存储提取出的数字extracted_digits=''#遍历第二个字符的每个字符forcharinsecond_char:#判断字符是否为数字ifchar.isdigit():#如果是数字,将其添加到提取的数字字符串中extracted_digits+=charifextracted_digits:parts1=parts[1].split(extracted_digits)sch_name=parts1[0]sch_num=extracted_digitselse:sch_name=parts[1]sch_num='识别出错啦'else:#使用正则表达式模式匹配类似"5000元"格式的数据pattern=r'\b\d+\s*元\b'#使用re.findall()函数提取匹配到的数据matches=re.findall(pattern,line.strip())iflen(matches)>=1:matchnum1=matches[0].split()fee_num=matchnum1[0]temp=0newzy_num=[]foriinrange(0,len(zy_num)):parts=zy_num[i].split(fee_numbers[i])newzy_num.append(parts[0])defprocess(sch_bsnall,sch_nameall,sch_numbers,zy_bsn,zy_name,newzy_num,fee_numbers):lis=[]forsinrange(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)returndf#写入到excel文件res=process(sch_bsnall,sch_nameall,sch_numbers,zy_bsn,zy_name,newzy_num,fee_numbers)res.index=index_listres.to_excel(r'C:\Users\Administrator\Desktop\1\image\2.xlsx',index=True)6.实现效果:生成的excel文件7.总结:本文介绍了利用Python对文本数据进行处理,并将处理结果保存到Excel文件的方法。通过示例代码和详细解释,读者可以了解到如何使用Python和Pandas库来处理和导出数据,从而更加高效地应对实际工作中的数据处理需求。
|
|