天天看點

如何将雜亂無章的txt檔案中的指定内容讀取到excel中一、問題描述 二、解決方案

目錄

一、問題描述

 二、解決方案

我們有時會遇到需要從txt檔案中選取指定的内容并将其輸出到excel檔案中,但是總是會遇到種種麻煩,這裡把我曾經遇到的,困擾我很久但在同學和網絡的幫助下成功輸出的例子記錄一下,也希望能為更多人提供解決問題的途徑。

一、問題描述

給定一個txt檔案,裡面有各種類型的資料,如下圖所示:

如何将雜亂無章的txt檔案中的指定内容讀取到excel中一、問題描述 二、解決方案

而我們的目的是:找到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檔案中的指定内容讀取到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行):

如何将雜亂無章的txt檔案中的指定内容讀取到excel中一、問題描述 二、解決方案

 但是我們需要的是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檔案如下:

如何将雜亂無章的txt檔案中的指定内容讀取到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")



           

有問題、建議或者需要檔案資源的小夥伴可以私信聯系我哦!