網(wǎng)站首頁 編程語言 正文
一、前言
Excel
文件是我們常用的一種文件,在工作中使用非常頻繁。Excel
中有許多強(qiáng)大工具,因此用Excel
來處理文件會(huì)給我們帶來很多便捷。但是有時(shí)候我們拿到了文件不是Excel
文件,而且我們又想用Excel
中的工具,這個(gè)時(shí)候我們就可以想辦法把這個(gè)文件轉(zhuǎn)換成Excel
文件了。今天我們就來實(shí)現(xiàn)一下,需要注意我們只能把有規(guī)律的文件轉(zhuǎn)換成Excel,而且今天的內(nèi)容也不是普遍通用的。只提供一種思路。
二、openpyxl模塊
openpyxl
模塊是用來操作Excel
文件的一個(gè)模塊,還有很多模塊可以做同樣的事情,這里就不介紹了。
1、安裝
安裝只需要執(zhí)行下面語句即可:
pip?install?openpyxl
然后在代碼中導(dǎo)入工作簿:
from?openpyxl?import?Workbook
這樣我們就可以開始操作了。
2、簡(jiǎn)單操作
我們來看一些簡(jiǎn)單的操作:
from?openpyxl?import?Workbook #?創(chuàng)建工作簿 wb?=?Workbook() #?激活 ws?=?wb.active #?設(shè)置指定格的數(shù)據(jù) ws['A1']?=?41 #?在下一行添加數(shù)據(jù) ws.append([1,?2,?3]) #?保存 wb.save("1.xlsx")
這里前面兩步是基本操作,首先創(chuàng)建Workbook對(duì)象,然后調(diào)用active函數(shù)激活。然后我們通過下標(biāo)的方式給指定坐標(biāo)的位置添加數(shù)據(jù)。最后調(diào)用save方法保存文件。
三、文本文件轉(zhuǎn)excel文件
上面的幾個(gè)操作就足夠我們今天的操作了,下面我們來看看如何將文本文件轉(zhuǎn)換成Excel
文件。
1、尋找規(guī)律
在文章開頭說了,我們只能將有規(guī)律的文本文件轉(zhuǎn)換成Excel
,不然沒有太多意義。所以我們第一步就是找規(guī)律。比如我們下面這個(gè)文件:
姓名,性別,年齡 zack,男,21 rudy,男,22 alice,女,20 atom,男,?23
我們來看一下上面的數(shù)據(jù),其中第一行是數(shù)據(jù)的字段。而后面幾行就是真實(shí)數(shù)據(jù)了。而單個(gè)數(shù)據(jù)的屬性值又由逗號(hào)隔開。這種規(guī)律非常明顯,很適合我們今天的內(nèi)容。不管仔細(xì)觀察可以看到,逗號(hào)有中文的也有英文的,而且有的里面還包含了空格。知道這些后我們?cè)谵D(zhuǎn)換的時(shí)候就需要針對(duì)性的處理一下了。
2、開始轉(zhuǎn)換
首先我們要處理文本,然后再寫入Excel
,具體代碼如下:
from?openpyxl?import?Workbook wb?=?Workbook() ws?=?wb.active #?處理文件 with?open("test.txt",?"r",?encoding="utf-8")?as?f: ????#?把逗號(hào)替換成統(tǒng)一的\t ????content?=?f.read().replace(",",?"\t").replace(",",?"\t") ????#?根據(jù)換行拆分內(nèi)容 ????lines?=?content.split("\n") ????#?提取標(biāo)題 ????titles?=?lines[0].split("\t") ????titles.insert(0,?"") ????#?標(biāo)題寫入excel ????ws.append(titles) ????#?寫入內(nèi)容 ????for?i,?line?in?enumerate(lines[1:]): ????????item?=?line.split("\t") ????????item.insert(0,?i) ????????ws.append(item) wb.save("1.xlsx")
經(jīng)過上面的處理,我們就成功將文本轉(zhuǎn)換成excel了,下面是結(jié)果圖:
excel表格
效果正是我們想要的,大家可以根據(jù)不同需求不同文件來修改處理的代碼。
補(bǔ)充
Python對(duì)于Excel文件的操作當(dāng)然不僅僅是可以將文本文件轉(zhuǎn)為Excel,還可以將PDF轉(zhuǎn)為Excel,下面是實(shí)現(xiàn)代碼,希望對(duì)你有所幫助
import pdfplumber import pandas as pd path = 'test.pdf' pdf = pdfplumber.open(path) i=1 #writer=pd.ExcelWriter('output.xlsx') df=pd.DataFrame(columns=['序號(hào)','刊名','主辦單位','等級(jí)']) sheetname=['考古文博','歷史學(xué)','馬克思主義理論','民族學(xué)與文化學(xué)','文學(xué)-外國(guó)文學(xué)','文學(xué)-中國(guó)文學(xué)','藝術(shù)學(xué)','語言學(xué)','哲學(xué)','宗教學(xué)','法學(xué)' ,'管理學(xué)','環(huán)境科學(xué)','教育學(xué)','經(jīng)濟(jì)學(xué)-財(cái)政科學(xué)','經(jīng)濟(jì)學(xué)-工業(yè)經(jīng)濟(jì)','經(jīng)濟(jì)學(xué)-金融','經(jīng)濟(jì)學(xué)-經(jīng)濟(jì)管理','經(jīng)濟(jì)學(xué)-經(jīng)濟(jì)綜合','經(jīng)濟(jì)學(xué)-貿(mào)易經(jīng)濟(jì)' ,'經(jīng)濟(jì)學(xué)-農(nóng)業(yè)經(jīng)濟(jì)','經(jīng)濟(jì)學(xué)-世界經(jīng)濟(jì)','人文地理學(xué)','社會(huì)學(xué)','體育學(xué)','統(tǒng)計(jì)學(xué)','圖書館情報(bào)與檔案學(xué)','心理學(xué)','新聞學(xué)與傳播學(xué)' ,'政治學(xué)-國(guó)際政治','政治學(xué)-中國(guó)政治','綜合-高校綜合性學(xué)報(bào)','綜合-綜合性人文社科期刊'] ##由于存在一個(gè)表格跨頁的情況,先將所有表格存放在一個(gè)DataFrame中,再根據(jù)序號(hào)拆分。 for page in pdf.pages[17:59]: print (page) # 獲取當(dāng)前頁面的全部文本信息,包括表格中的文字 # print(page.extract_text()) for table in page.extract_tables(): #print(table) df=df.append(pd.DataFrame(table[1:],columns=table[0]),ignore_index=True) print (df) writer=pd.ExcelWriter('output3.xlsx') new_df=pd.DataFrame() j=1 index=[] #記錄序號(hào)==1的行索引,用于后面的表格拆分 for i in range(len(df)): if df.ix[i,0]=='1': index.append(i) print ("################") index.append(len(df)) #print (index) #按行索引將內(nèi)容切片并逐個(gè)添加到表中 for t in range(len(index)-1): new_df=df.ix[index[t]:index[t+1]-1,:] #print (new_df) new_df.to_excel(writer,sheet_name=sheetname[t],encoding='gb2312',index=None) writer.save() pdf.close() print('finished')
原文鏈接:https://mp.weixin.qq.com/s/5_JR_EdMQukBQt9Gm7hsYQ
相關(guān)推薦
- 2022-12-07 C++?兩個(gè)vector對(duì)象拼接方式_C 語言
- 2022-07-08 關(guān)于Python與Golang語言的對(duì)比分析_其它綜合
- 2021-12-13 VS在調(diào)試時(shí),查看是DEBUG/RELEASE
- 2023-03-04 C語言模擬實(shí)現(xiàn)字符串庫函數(shù)的示例講解_C 語言
- 2022-11-14 Go語言Goroutinue和管道效率詳解_Golang
- 2022-10-20 三種Golang數(shù)組拷貝方式及性能分析詳解_Golang
- 2022-08-02 goFrame的gqueue與channe的區(qū)別_Golang
- 2022-06-06 typescript使用class關(guān)鍵字定義一個(gè)類、static、readonly
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支