传递列表作为函数位置参数触发TypeError的问题排查与修复
问题修复方案
错误根源
你遇到的TypeError: Document() takes from 0 to 1 positional argument but 450 were given,核心原因是:
python-docx的Document()构造函数仅支持单个文件路径作为参数(或无参数创建空白文档),但你通过*files语法把整个文件列表拆成了数百个独立参数传入,导致参数数量超标。- 原代码还存在两个隐性错误:未导入
os模块、变量初始化与追加不匹配(初始化files = []却往document_list里append)。
修复后的完整代码
1. 修正文件收集逻辑
import os import pandas as pd import io import csv from docx import Document # 初始化正确的列表变量 document_list = [] for path, subdirs, files in os.walk(r"path"): for name in files: file_path = os.path.join(path, name) # 简化后缀判断逻辑 if file_path.endswith(".docx"): document_list.append(file_path)
2. 重构read_docx_tables函数
将函数改为处理单个文件(符合Document()的参数要求),如果需要批量处理,外部循环调用即可:
def read_docx_tables(filename, tab_id=None, **kwargs): """ 解析Word文档(.docx)中的表格为Pandas DataFrame 参数: filename: Word文档路径 tab_id: 单个表格的索引(从0开始),为None时返回所有表格的DataFrame列表 kwargs: 传递给pd.read_csv()的参数 返回: 指定单个表格的DataFrame,或所有表格的DataFrame列表 """ def read_docx_tab(tab, **kwargs): vf = io.StringIO() writer = csv.writer(vf) for row in tab.rows: writer.writerow(cell.text for cell in row.cells) vf.seek(0) return pd.read_csv(vf, **kwargs) # 直接传入单个文件路径,不再使用*files拆包 doc = Document(filename) if tab_id is None: return [read_docx_tab(tab, **kwargs) for tab in doc.tables] else: try: return read_docx_tab(doc.tables[tab_id], **kwargs) except IndexError: print(f'错误: 指定的表格索引[tab_id]: {tab_id} 不存在。') raise
3. 批量处理所有文件并导出CSV
# 存储所有解析后的DataFrame all_dataframes = [] for file_path in document_list: try: # 解析当前文件的所有表格 tables = read_docx_tables(file_path) all_dataframes.extend(tables) # 为每个表格导出CSV文件 base_name = os.path.splitext(file_path)[0] for idx, df in enumerate(tables): csv_path = f"{base_name}_表格_{idx}.csv" df.to_csv(csv_path, index=False, encoding='utf-8-sig') print(f"已导出: {csv_path}") except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}")
关键修改点说明
- 移除了函数参数中的
*files,改为单个filename参数,匹配Document()的参数要求。 - 修正了文件收集部分的变量错误,补充了缺失的
os模块导入。 - 优化了后缀判断逻辑,使用
endswith()更简洁。 - 批量处理时通过外部循环遍历文件列表,逐个调用解析函数,避免一次性传入多个文件路径导致的参数错误。
内容的提问来源于stack exchange,提问作者user18708380
相关产品推荐
相关产品推荐

