You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多文档处理时出现Expected string or buffer错误的技术问询

解决多文档处理时的"expected string or buffer"错误

看起来你在批量处理文档时遇到了正则匹配的类型错误,这个问题通常是因为re.split()接收到了非字符串类型的输入,或者拆分后的列表里混入了无效元素。咱们一步步来分析和解决:

错误原因分析

你的单文档代码能正常工作,但多文档场景下出错,大概率是这几个情况:

  • 某个目标文档为空,或者读取时出现异常导致data不是字符串类型
  • re.split(r"\n(\s)*\n", data)的拆分结果里混入了空字符串或非字符串元素,后续循环处理时传递给re.split()引发报错
  • 批量处理时的文件遍历逻辑有问题,误将非文件对象或无效内容传入了处理流程

修复步骤和代码示例

1. 优化单文档处理逻辑,增加容错性

先把单文件处理的逻辑加固,确保每个环节都处理字符串类型的输入,并过滤无效元素:

import re
import io
from pathlib import Path

def process_single_file(input_path, write_path):
    try:
        # 指定编码避免乱码,同时兼容不同系统的文件
        with io.open(input_path, mode='r', encoding='utf-8') as f, io.open(write_path, mode='w', encoding='utf-8') as f2:
            data = f.read()
            
            # 确保data是字符串,处理空文档或读取异常的情况
            if not isinstance(data, str):
                data = str(data)
            
            # 优化正则:匹配任意空行(包括中间带空白字符的空行),避免捕获组产生多余元素
            # 拆分后过滤掉全空白的段落
            para_list = [para.strip() for para in re.split(r'\n\s*\n', data) if para.strip()]
            
            processed_lines = []
            for para in para_list:
                # 拆分段落为行,同样过滤全空白的行
                lines = [line.strip() for line in re.split(r'\n', para) if line.strip()]
                processed_lines.extend(lines)
            
            # 将处理后的内容写入输出文件
            f2.write('\n'.join(processed_lines))
    except Exception as e:
        print(f"处理文件 {input_path} 时出错: {str(e)}")

2. 批量处理多文档的完整流程

基于上面的单文件处理函数,实现批量遍历目录下的文档:

# 配置输入输出目录
input_dir = Path("./your_input_folder")
output_dir = Path("./your_output_folder")
# 自动创建输出目录(如果不存在)
output_dir.mkdir(exist_ok=True)

# 遍历目录下的所有文本文件(可根据需要修改后缀,比如*.md、*.txt)
for input_file in input_dir.glob("*.txt"):
    # 保持输出文件和输入文件同名
    output_file = output_dir / input_file.name
    process_single_file(input_file, output_file)

print("多文档处理完成!")

3. 关键优化点

  • 正则表达式优化:把r"\n(\s)*\n"改成r"\n\s*\n",去掉不必要的捕获组,避免拆分后产生多余的空字符串元素
  • 过滤无效内容:在拆分段落和行之后,都通过strip()和条件判断过滤掉全空白的元素,避免后续处理出错
  • 异常处理:添加try-except块,单个文件处理出错时不会中断整个批量任务,还能打印错误信息方便排查
  • 编码指定:打开文件时明确指定encoding='utf-8',避免不同编码的文档读取时出现乱码或异常

4. 快速排查问题文件

如果还是报错,可以在process_single_file函数里添加调试打印,定位出问题的文件:

print(f"正在处理: {input_path}")
print(f"读取到的内容类型: {type(data)}, 内容长度: {len(data)}")

内容的提问来源于stack exchange,提问作者Subigya Upadhyay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:20:56