一、读写docx
- 读取docx文件(无法读取旧的doc文件—可以先转化为docx再读取)
pip install python-docx
import docx
def read_word(file_path):
doc = docx.Document(file_path)
text = []
for paragraph in doc.paragraphs:
text.append(paragraph.text)
return ‘\n’.join(text) - 读取表格
def read_table(file_path):
doc = docx.Document(file_path)
tables = doc.tables
for table in tables:
table_rows = table.rows
for row in table_rows:
row_cells = row.cells
for cell in row_cells:
print(cell.text) - 读取图片
def read_images(file_path):
doc = docx.Document(file_path)
images = doc.inline_shapes
for image in images:
print(image.image.shape_type) // 获取图片形状类型
print(image.image.size) // 获取图片大小
print(image.image.source) // 获取图片来源(文件路径) - 写入word
def create_word_document(file_path, title):
doc = docx.Document()
doc.title = title // 标题
doc.add_paragraph(“这是一段示例文本。”) //段落
add_picture(path) // 图片
t = doc.add_table(rows=rows, cols=cols, style=“Table Grid”) //加表格
cell = t.cell(i, j) // 给表格中增加内容,i,j为表格位置:第i行,第j列
cell.text = cell_text // cell为表格中一个格子,text为格子里的值
doc.save(path) //保存
二、doc文件操作
使用win32com库函数
import win32com.client
word_ap = win32com.client.Dispatch(‘Word.Application’)
doc = word_app.Documents.Open(input_path)
… #对doc的各种操作
doc.Close()
word_ap.Quit()
补充说明:
- 使用win32com操作doc文件时,对doc文件名称有要求,即不能包含空格,否则open时报找不到文件错误(除了空格外,还有一些其他的字符也不被允许,但我忘记统计了)。
- 如果想批量将word文件(.doc,.docx)转为pdf文件,就可以使用上述函数 + doc.SaveAs(output_path, FileFormat=17)即可
- 对于包含空格的文件,你可以记录下原名称,再将其shuilt移动(重命名为另一个文件) or 重命名 去除文件名空格,对文件操作后,再saveAs保存为原名称文件即可(有其他更加简便的方法,欢迎分享!!!)
- 批量转word->pdf时,最好try-except一下,记录转失败的文件(因为有些word文件会因为原文件的某些设置,无法转成功,导致报错)。
批量将doc,docx文件转为pdf
import shutil
import win32com.client
import os
doc_path = “"
pdf_path = ""
pdf_tmp = ""
fs = []
for roots, _, files in os.walk(doc_path):
for file in files:
fs.append(roots + '/' + file)
print(len(fs))
def convert_to_pdf(input_path, output_path, word_app):
print(f)
doc = word_app.Documents.Open(input_path)
print(doc)
doc.SaveAs(output_path, FileFormat=17)
doc.Close()
word_ap = win32com.client.Dispatch('Word.Application')
for f in fs:
filename: str = os.path.basename(f)
if (filename.endswith('.doc') or filename.endswith('.docx')) and not filename.startswith('~$'):
list = filename.split(".")
list[-1] = 'pdf'
output_file = ".".join(list)
try:
convert_to_pdf(f, pdf_path + output_file, word_ap)
except Exception as e:
try:
shutil.move(f, pdf_tmp + filename.replace(' ', '1'))
convert_to_pdf(pdf_tmp + filename.replace(' ', '1'), pdf_tmp + 'tmp_file.pdf', word_ap)
shutil.move(pdf_tmp + 'tmp_file.pdf', pdf_path + output_file)
except Exception as e:
print(f)
with open(pdf_path + "error.txt", mode="a", encoding='utf-8') as file:
file.write(f + '\n')
word_ap.Quit()
三、读写excel
-
读取excel—pandas
import pandas as pd
data = pd.read_excel(‘example.xlsx’, engine=‘openpyxl’)
print(data[‘A’]) # 打印 A 列的数据
print(data.at[0, ‘A’]) # 打印第一行第一列的单元格数据
data[‘type’] = ’A类‘ 新建列
data.values.tolist() # 将excel表转化为[[],[],[],[],…,[]]的格式,一个[]为一行 -
读取excel—openpyxl
import openpyxl
workbook = openpyxl.load_workbook(‘example.xlsx’)
ws= workbook[‘Sheet1’] #选择sheet
rows = ws.rows #所有行,相当于ws.iter_rows()
for row in rows :
for cell in row:
print(cell.value, end=’ ') -
写入excel:
1)df = pd.DataFrame(data, columns=[‘列名1’, ‘列名2’]) #选择data格式为[[],[],[],[],…,[]]
df.to_excel(‘aaaaaa.xlsx’, index=False, engine=‘openpyxl’)
2)data.to_excel(‘aaaa.xlsx’, index=False, engine =‘openpyxl’)
3)新增一列:
df = pd.read_excel('example.xlsx')
# 添加新列,新列的value固定
df['new_column'] = '1'
#添加新列,新列的value不固定
new_colunm = [1,2,3,4]
df.insert(loc=0, column='new_colunm ', value=new_colunm )
df.to_excel(’aaa.xlsx‘, index=False)
四、读写json格式文件
- 读取json格式文件
file = r'data.json'
with open(file, mode='r', encoding='utf-8') as f:
# datas为数组
datas = json.load(f)
- 写入json格式文件
results.append({
"path": path + '/' + image_name,
'vecs': vecs
})
# results为数组,每一个元素格式为{'path': ..., 'vesc': ...}
df = pd.DataFrame(results, columns=["path", "vecs"])
df.to_json('data.json', orient='records', force_ascii=False, indent=4)
- json的dumps,dump,loads和load函数使用:
import json
# type(x)为dict
x = {'name':'张三','age':19,'city':'四川'}
# 用dumps将python的dict格式编码成json字符串格式(str)
# type(y)为str
# json.dumps(x, indent=2),indent=2用于设置缩进,否则转化后的就是一行文本
print(json.dumps(x))
#用loads将json字符串格式(str)编码成python的dict
print(json.loads(json.dumps(x)))
filename = 'pi_x.txt'
with open (filename,'w') as f:
# 将x写入pi_x.txt中
json.dump(x,f)
with open (filename) as f_1:
# 读取pi_x.txt中的json格式数据
print(json.load(f_1))