使用python-docx库,将100份doc文件中文字,表格全都提取出来,把文字,表格存储到CSV文件
时间: 2024-12-08 21:17:15 浏览: 20
基于Python获取docx/doc文件内容代码解析
使用Python的`python-docx`库来批量提取Word文档中的文本和表格,并保存到CSV文件中,你需要分几个步骤来完成。这里是一个大致的流程:
1. **安装所需库**:
首先确保你已经安装了`python-docx`库,如果没有,可以通过pip安装:
```
pip install python-docx pandas openpyxl
```
还需要用到pandas库处理表格数据,openpyxl用于读取Excel文件(因为表格可能会导出为Excel格式)。
2. **读取和解析文件**:
创建一个函数来打开每个.doc文件,检查其内容,如果包含文本和表格,就提取它们。对于文本,可以直接读取;对于表格,可以尝试转存成Excel,然后读取Excel的内容。
```python
import os
from docx import Document
import pandas as pd
def extract_content(doc_path):
doc = Document(doc_path)
text = ''
tables_data = []
for paragraph in doc.paragraphs:
text += paragraph.text + '\n'
# 尝试将表格保存到临时Excel文件
try:
for table in doc.tables:
df_table = pd.DataFrame.from_records([dict(zip(table.columns, row)) for row in table.rows])
df_table.to_excel('temp.xlsx', index=False, sheet_name=table.name)
with pd.ExcelFile('temp.xlsx') as temp_excel:
data = temp_excel.parse(sheet_name=table.name)
tables_data.append(data)
except Exception as e:
print(f"Failed to process table due to error: {e}")
return text, tables_data
```
3. **批处理文件**:
定义一个目录路径,遍历所有文件并将结果写入CSV。为了组织文件,可以创建一个单独的CSV文件来存放文本,另一个文件存放表格数据。
```python
input_dir = 'path/to/input/docs'
output_text_path = 'output_text.csv'
output_tables_path = 'output_tables.csv'
texts = []
tables = []
# 遍历输入目录中的所有.doc文件
for filename in os.listdir(input_dir):
if filename.endswith(".doc"):
doc_path = os.path.join(input_dir, filename)
text, table_data = extract_content(doc_path)
texts.append(text)
tables.append(table_data)
# 写入CSV文件
with open(output_text_path, 'w', newline='') as f_text, open(output_tables_path, 'w', newline='') as f_tables:
writer_text = csv.writer(f_text)
writer_tables = pd.ExcelWriter(output_tables_path, engine='openpyxl')
writer_text.writerow(['Text'])
for i, text in enumerate(texts):
writer_text.writerow([text])
for i, table_data in enumerate(tables):
if isinstance(table_data, list):
for sheet_name, data in table_data.items():
excel_writer = pd.ExcelWriter(f'temp_{i}.xlsx', engine='openpyxl')
data.to_excel(excel_writer, sheet_name=sheet_name)
excel_writer.save()
writer_tables.book = load_workbook(f'temp_{i}.xlsx')
writer_tables.sheets[sheet_name].write_rows(f'Table{i+1}', data.index, data.values)
writer_tables.save()
os.remove('temp*.xlsx') # 删除临时Excel文件
```
注意,这个示例假设表格都可以成功转化为Excel格式。如果表格有特殊结构或格式,可能需要调整转换方法。同时,由于处理大量文件可能消耗时间,你可能还需要添加一些进度跟踪或并发处理功能。
阅读全文