600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 如何将杂乱无章的txt文件中的指定内容读取到excel中

如何将杂乱无章的txt文件中的指定内容读取到excel中

时间:2019-07-15 16:20:50

相关推荐

如何将杂乱无章的txt文件中的指定内容读取到excel中

目录

一、问题描述

二、解决方案

我们有时会遇到需要从txt文件中选取指定的内容并将其输出到excel文件中,但是总是会遇到种种麻烦,这里把我曾经遇到的,困扰我很久但在同学和网络的帮助下成功输出的例子记录一下,也希望能为更多人提供解决问题的途径。

一、问题描述

给定一个txt文件,里面有各种类型的数据,如下图所示:

而我们的目的是:找到copout16文件中的关键词’ fichier base AFA3G445’,把它后面第20行,摘出来(就是如下这一行);1 17 0 29.54 343 372 27 411 699 991 0.00 25793 -98 -75 65 0.20 0.00 8.349 9.519 95.50 4.50 0.00 0.00 0.00。找到并输出所有的关键词’ fichier base AFA3G445’后20行的内容,并把它输出到excel文件里。

二、解决方案

首先我们要看一下这个txt的基本信息,统计一下文件的行数,以便后续操作:

with open('copout16.txt', 'r') as f: #打开文件,并以”r“的形式就是只读文件的形式打开count = 0 #初始化行数为0for line in f:count += 1print(count)f.close() #一定记得关闭文件print ('文件行数 = ' + str(count)) #最后打印一下看一下行数

接着我们就需要去找到那个需要的目标,并找到在其下方20行的那一行需要的数字,并且先把识别出的那一行数字给保存在一个txt文件中(注意:一定要加上”target_line<count-20“来防止数组越界错误;还要注意路径要修改成自己电脑上的路径)。

with open('copout16.txt', 'r') as f: #打开文件context = f.readlines()target_line = 0 #初始化目标行数位置为0for l in context:if l.find('fichier base AFA3G445') != -1 and target_line<count-20: #找到那个词,并且要满足不大于整个文件的长度(因为在实际的测试过程中发现,如果不加target_line<count-20会出现数组越界的错误print(context[target_line + 20])f1= open(r'result.txt', 'a')#新打开一个txt,只把需要的那一行数据给读入保存f1.write(context[target_line + 20])f1.close()target_line += 1f.close()

完成之后可以发现在指定位置处的result.txt文件中出现了我们需要的那几行数据(一共有39行):

但是我们需要的是excel文件数据啊,不是txt,咋办呢?现在需要把txt文件中的数据,一个一个填入名为result.xlsx文件中,用python怎么来操作呢?

在尝试过无数种方法之后(最让人头疼的问题就在于每一行的数据中间有空格,我想用split方法分隔开,但是发现每个数之间的空格个数也不一样,长度也不一样,网上搜到的方法都解决不了,很让人头大)在请教了学霸”陈同学“过后,我得到了解答:利用python中的pandas库可以轻松解决这个问题(D+表示的只提取txt文件中的数字部分,很智能的;header=None表示我们原本的txt文件中的数据没有表头,他会在新生成的excel文件中自动添加表头最后表明文件的编码方式是utf-8)

import pandas as pddatas = pd.read_csv('result.txt', sep ='\D+', header = None, encoding = ' utf-8')datas.to_excel("result.xlsx")

处理后的excel文件如下:

至此就全部实现了我们需要的功能了!

最后给出完整代码:

import numpyimport openpyxlfrom openpyxl import Workbookwith open('copout16.txt', 'r') as f:count = 0for line in f:count += 1print(count)f.close()print ('文件行数 = ' + str(count))with open('copout16.txt', 'r') as f:context = f.readlines()target_line = 0for l in context:if l.find('fichier base AFA3G445') != -1 and target_line<count-20:sum += 1print(context[target_line + 20])f1= open(r'result.txt', 'a')f1.write(context[target_line + 20])f1.close()target_line += 1f.close()import pandas as pddatas = pd.read_csv('result.txt', sep ='\D+', header = None, encoding = ' utf-8')datas.to_excel("result.xlsx")

有问题、建议或者需要文件资源的小伙伴可以私信联系我哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。