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

读取阿拉伯语txt生成DataFrame时触发NoneType不可下标报错

问题原因

报错和阿拉伯语内容、文件编码没有关系,是文件名提取的正则表达式写法错误导致的:
你写的正则re.compile('\\(.*)\.txt')经过字符串转义后,实际匹配规则是匹配带字面量左括号(、后续接任意字符、以.txt结尾的字符串。之前处理英文文件能正常运行,是因为当时的英文文件名恰好包含(字符,正则可以命中;阿拉伯语文件名里没有左括号,fileName.search(file)的返回值是None,后续执行key[1]时就会触发NoneType不可下标的报错。

修复方法

删掉正则里多余的、用来转义左括号的反斜杠即可,推荐用正则原生字符串前缀r避免转义冲突,修正后的代码:

# 修正前错误写法:fileName = re.compile('\\(.*)\.txt')
fileName = re.compile(r'(.*)\.txt')
可选优化
  • 提前过滤非txt文件,避免把目录、其他后缀的文件纳入处理流程
  • 增加正则匹配结果校验,遇到不符合命名规则的文件打印提示后跳过,避免程序直接中断
  • 提取无后缀文件名可以直接用os库内置方法,比正则兼容性更强,不会出现转义错误:os.path.splitext(os.path.basename(file_path))[0]

优化后的完整可运行代码:

import os
import pandas as pd

filePath = []
for file in os.listdir("./arabic_txt"):
    if file.endswith(".txt"):
        filePath.append(os.path.join("./arabic_txt", file))

data = {}
for file in filePath:
    # 直接用os方法提取无后缀文件名,无需正则
    doc_name = os.path.splitext(os.path.basename(file))[0]
    with open(file, "r", encoding='utf-8') as readFile:
        data[doc_name] = [readFile.read()]

df = pd.DataFrame(data).T.reset_index().rename(columns = {'index':'document', 0:'text'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:51:34