如何将杂乱无章的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   #初始化行数为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")



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

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
python实现: 【问题描述】 英文电影参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件每行参演人员名单由冒号":"分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt: 1.从标准输入读取一整数,作为排版后所有各行冒号":"在一行的固定位置;假设输入的整数肯定大于排版后所有各行冒号":"前的字符个数,位置从1开始计数; 2.冒号":"左边的单词串以行头为基准左对齐,左边的最后一个单词与冒号之间以空格填充;冒号":"右边的单词串以冒号":"为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符; 3.冒号":"左右两边的单词间都只有一个空格分隔,并且要求冒号两边至少各有一个空格。 假设输入文件每行字符个数不超过100。 【输入形式】 待排版的参演人员名单从当前目录下的listin.txt文件读入;表示冒号":"位置的整数从标准输入读入。 【输出形式】 排版后的参演人员名单输出到当前目录下的listout.txt。 【输入样例】 假设文件listin.txt内容为: Digital Intermediate by : EFILM Supervising Digital Colorist : STEVEN J. SCOTT Second Colorist :ANDREW FRANCIS Digital Intermediate Producer:LOAN PHAN Digital Intermediate Editor: DEVON MILLER 表示冒号固定位置的整数为: 40 【输出样例】 文件listout.txt内容应为: 【样例说明】 输入的文件listin.txt有五行参演人员名单,要求排版后冒号":"位于第40个字符的位置,按照上述排版规则输出到文件listout.txt
06-01
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉姆哥的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值