python3操作excel文件和.docx文件
2018-09-06 本文已影响17人
test小星星
读取excel文件
pip install xlrd # 安装xlrd模块
import xlrd # 导入xlrd模块
# 打开excel文件
data = xlrd.open_workbook('文件路径及文件名')
# 获取读入的文件的
sheet = data.sheet_by_index(0) # 索引的方式,从0开始
# 获取行数
nrows = sheet.nrows
# 获取列数
ncols = sheet.ncols
# 获取整行的值
sheet.row_values(0) # 第一行的值
# 获取整列的值
sheet.col_values(0) # 第一列的值
# 获取某个单元格的值
data = sheet.cell(x, y).value
对已有的excel更新(修改)
import xlrd
from xlutils.copy import copy # 导入xlutils.copy
# 打开文件
file = xlrd.open_workbook('文件路径', formatting_info=True) # formatting_info=True保留文档单元格的格式,(默认False)
# 拷贝一份新的文件
new_file = copy(xls_fils)
# 此对象拥有write方法
sheet = new_file.get_sheet(0)
# 要修改的单元格
sheet.write(4, 7, data)
# 修改后的保存路径
new_file.save(save_path)
formatting_info还没有对新版本的xlsx的格式完成兼容,所以在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常:"formatting_info=True not yet implemented"
解决办法:修改为xlsx为xls。
更改文件格式
# xls更改为xlsx
import win32com.client
path = r'E:\修改文件\test.xls'
excel = win32com.client.gencache.EnsureDispatch('Excel.Application') # 要看MIME手册
# 打开被修改的文件
wb = excel.Workbooks.Open(path)
# 修改文件(51是xlsx格式)然后保存。 56是xls
wb.SaveAs(path + 'x', FileFormat=51)
wb.Close()
excel.Application.Quit()
获取某个目录的所有文件
import os
for root, dirs, filesin os.walk(file_dir):
print(root) # 当前目录路径
print(dirs) # 当前路径下所有子目录
print(files) # 当前路径下所有非目录子文件
读取.doxc文件
# 安装doxc库
pip install docx
# 导入docx库
import docx
# 打开文件
data = docx.Document('文件路径及文件名')
# 读文件
for file in data.paragraphs:
print(file.text) # 逐行读取
读取.docx文件中的表格数据
# 获取文件中的表格集
tables = data.tables
# 获取文件中的第一个表格
table = tables[0]
for i in range(1,len(table.rows)): #从表格第二行开始循环读取表格数据
result = table.cell(i,0).text + " " + table.cell(i,1).text # 读取第二行开始的第一个单元格和第二个单元格
print(result)
将doc转为docx
from win32com import client as wc
word = wc.Dispatch("Word.Application")
doc = word.Documents.Open('.doc文件路径及文件名')
doc.SaveAs('转换成docx文件后保存的路径', 12) # 12为docx
doc.Close()
word.Quit()
CSV文件操作
import csv
import codecs
from itertools import islice
# 读取本地 CSV 文件
data = csv.reader(codecs.open('user_info.csv', 'r', 'utf_8_sig'))
# 用户存放用户数据
users = []
# 循环输出每一行信息
for line in islice(data, 1, None):
users.append(line)
islice用于切片操作
islice(iterable, [start,] stop [, step]) # --> islice object
islice(f,0,10) # 取文件的前10行
islice(f,100,300) #生成 文件 100 到 300 行的生成器,不包含第300行
islice(f,500) #生成500行以内的生成器
islice(f,500,None) #生成500行以后的生成器
for line in islice(f,0,10):
print line