赞
踩
目录
我们有时会遇到需要从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 #初始化行数为0
- for line in f:
- count += 1
- print(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 #初始化目标行数位置为0
- for 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 += 1
- f.close()
完成之后可以发现在指定位置处的result.txt文件中出现了我们需要的那几行数据(一共有39行):
但是我们需要的是excel文件数据啊,不是txt,咋办呢?现在需要把txt文件中的数据,一个一个填入名为result.xlsx文件中,用python怎么来操作呢?
在尝试过无数种方法之后(最让人头疼的问题就在于每一行的数据中间有空格,我想用split方法分隔开,但是发现每个数之间的空格个数也不一样,长度也不一样,网上搜到的方法都解决不了,很让人头大)在请教了学霸”陈同学“过后,我得到了解答:利用python中的pandas库可以轻松解决这个问题(D+表示的只提取txt文件中的数字部分,很智能的;header=None表示我们原本的txt文件中的数据没有表头,他会在新生成的excel文件中自动添加表头最后表明文件的编码方式是utf-8)
- import pandas as pd
-
- datas = pd.read_csv('result.txt', sep ='\D+', header = None, encoding = ' utf-8')
- datas.to_excel("result.xlsx")
处理后的excel文件如下:
至此就全部实现了我们需要的功能了!
最后给出完整代码:
- import numpy
- import openpyxl
- from openpyxl import Workbook
-
- with open('copout16.txt', 'r') as f:
- count = 0
- for line in f:
- count += 1
- print(count)
- f.close()
- print ('文件行数 = ' + str(count))
-
- with open('copout16.txt', 'r') as f:
- context = f.readlines()
- target_line = 0
- for l in context:
- if l.find('fichier base AFA3G445') != -1 and target_line<count-20:
- sum += 1
- print(context[target_line + 20])
- f1= open(r'result.txt', 'a')
- f1.write(context[target_line + 20])
- f1.close()
- target_line += 1
- f.close()
-
-
-
- import pandas as pd
-
- datas = pd.read_csv('result.txt', sep ='\D+', header = None, encoding = ' utf-8')
- datas.to_excel("result.xlsx")
-
-
-
有问题、建议或者需要文件资源的小伙伴可以私信联系我哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。