当前位置:   article > 正文

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

在txt文本中提取

目录

一、问题描述

 二、解决方案

我们有时会遇到需要从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的基本信息,统计一下文件的行数,以便后续操作:

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

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

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

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

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

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

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

处理后的excel文件如下:

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

最后给出完整代码:

  1. import numpy
  2. import openpyxl
  3. from openpyxl import Workbook
  4. with open('copout16.txt', 'r') as f:
  5. count = 0
  6. for line in f:
  7. count += 1
  8. print(count)
  9. f.close()
  10. print ('文件行数 = ' + str(count))
  11. with open('copout16.txt', 'r') as f:
  12. context = f.readlines()
  13. target_line = 0
  14. for l in context:
  15. if l.find('fichier base AFA3G445') != -1 and target_line<count-20:
  16. sum += 1
  17. print(context[target_line + 20])
  18. f1= open(r'result.txt', 'a')
  19. f1.write(context[target_line + 20])
  20. f1.close()
  21. target_line += 1
  22. f.close()
  23. import pandas as pd
  24. datas = pd.read_csv('result.txt', sep ='\D+', header = None, encoding = ' utf-8')
  25. datas.to_excel("result.xlsx")

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/373527
推荐阅读
相关标签
  

闽ICP备14008679号