python讀寫doc/docx/txt/xls檔案
一、處理檔案
1、讀取txt檔案
#!/usr/bin/python
# python3.6
file = open('E:\\個人檔案\\6-desktop\\new.txt','r')
for line in file:
print(line)
2、讀取docx檔案的內容
1)Python可以利用python-docx模組處理word文件,處理方式是面向物件的。也就是說python-docx模組會把word文件,文件中的段落、文字、字型等都看做物件,對物件進行處理就是對word文件的內容處理。
2)需要注意,python-docx模組安裝需要在cmd命令列中輸入pip install python-docx
注意在匯入模組時,用的是import docx
。
3)程式碼
#讀取docx中的文字程式碼示例 import docx #獲取文件物件 file=docx.Document("E:\\個人檔案\\6-desktop\\xxxx.docx") print("段落數:"+str(len(file.paragraphs)))#段落數為13,每個回車隔離一段 #輸出每一段的內容 for para in file.paragraphs: print(para.text) #輸出段落編號及段落內容 for i in range(len(file.paragraphs)): print("第"+str(i)+"段的內容是:"+file.paragraphs[i].text)
3、處理doc檔案
問題:python無法讀取.doc檔案
解決方案:利用python將大批.doc檔案轉化為.docx檔案,再讀寫.docx檔案
問題分析:python利用python-docx (0.8.6)庫可以讀取.docx檔案或.txt檔案,且一路暢通無阻,而對.doc檔案本身python是無能為力的,那有很多同學就不服氣,我手動把.doc檔案的字尾名改為.docx或.txt不就解決問題了嗎?答案是不能的,簡單修改後綴名,那麼檔案就被你玩壞了,別說打不開,就是開啟也是天書啊(亂碼)。python無法操作.doc檔案是他的先天不足,但是我們不要鑽牛角尖一定要在網際網路上找到一種原始碼直接讀取.doc檔案,一呼叫就好了,但是不幸的是,你可能在網上也找不到解決方案。正當我一籌莫展之時,我將.doc文件利用手動的方式“另存為”.docx文件,就能夠成功開啟轉化後的.docx文件,於是我就嘗試利用程式碼方式完成這個手動的“另存為”功能,問題得以解決。
程式碼如下:
import sys
import pickle
import re
import codecs
import string
import shutil
from win32com import client as wc
import docx
def doSaveAas():
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(u'E:\code\\xxxx.doc') # 目標路徑下的檔案
doc.SaveAs(u'E:\\code\\hhhhhhhh.docx', 12, False, "", True, "", False, False, False, False) # 轉化後路徑下的檔案
doc.Close()
word.Quit()
doSaveAas()
4、讀取xlsx檔案
1) 確保安裝好excle的處理包xlrd
2) 處理程式碼如下
# -*- coding: utf-8 -*-
import xdrlib ,sys
import xlrd
def open_excel(file= 'file.xls'):
try:
data = xlrd.open_workbook(file)
return data
except Exception as e:
print(str(e))
#根據索引獲取Excel表格中的資料 引數:file:Excel檔案路徑 colnameindex:表頭列名所在行的所以 ,by_index:表的索引
def excel_table_byindex(file= 'E:\\個人檔案\\6-desktop\\xxxx.xls',colnameindex=0,by_index=0):
data = open_excel(file)
table = data.sheets()[by_index]
nrows = table.nrows #行數
ncols = table.ncols #列數
colnames = table.row_values(colnameindex) #某一行資料
list =[]
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
app = {}
for i in range(len(colnames)):
app[colnames[i]] = row[i]
list.append(app)
return list
#根據名稱獲取Excel表格中的資料 引數:file:Excel檔案路徑 colnameindex:表頭列名所在行的所以 ,by_name:Sheet1名稱
def excel_table_byname(file= 'E:\\個人檔案\\6-desktop\\xxxx.xls',colnameindex=0,by_name=u'電度'):
data = open_excel(file)
table = data.sheet_by_name(by_name)
nrows = table.nrows #行數
colnames = table.row_values(colnameindex) #某一行資料
list =[]
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
app = {}
for i in range(len(colnames)):
app[colnames[i]] = row[i]
list.append(app)
return list
def main():
tables = excel_table_byindex()
for row in tables:
print(row)
tables = excel_table_byname()
for row in tables:
print(row)
if __name__=="__main__":
main()