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

Jupyter Notebook循环处理数据集报错:'w'/'r'含义及目录问题咨询

问题解析与修复方案

先搞懂'r'和'w'是什么

这俩是Python open() 函数的文件打开模式:

  • 'r':只读模式,是调用open()时的默认模式,用来读取已存在的文件,如果指定的文件不存在,就会报错。
  • 'w':写入模式,用来创建新文件或者覆盖已有文件的全部内容。注意:如果要写入的文件所在的目录不存在,也会报错。

你的代码为啥报错?

修改后的代码有几个致命问题,直接导致了"不存在'w'或'r'目录"的错误:

  1. filenames赋值错误:你把filenames设成了字符串"working_set",Python遍历字符串时会逐个字符拆开来循环,所以循环里的i会依次变成'w'、'o'、'r'...代码试图打开这些单个字符作为文件名,自然找不到对应的文件/目录。
  2. 缺少必要变量定义:cleanedtextdirectory和working_set变量都没定义,前者是存放清理后文件的目录路径,后者你错误地用在了文本处理里,实际应该用读取到的文件内容。
  3. 文件打开逻辑错误:打开输出文件时,你直接用了目录路径cleanedtextdirectory,而且没指定写入模式,默认是只读的'r',既没法写入,也不能直接打开目录。
  4. 缺少文件列表获取逻辑:原代码里的注释是要获取working_set目录下的所有文件名,你没补这部分代码。
  5. 模块导入缺失:用punctuation和regex前没导入对应的模块。

修复后的完整代码

# 导入必要模块
import os
import regex
import string

# 定义基础路径(这里需要你替换成自己的corpora实际路径)
corpora = "/path/to/your/corpora/"
# 清理后文件的存储目录
cleanedtextdirectory = corpora + 'working_set_cleaned/'
# 确保输出目录存在,不存在就创建
os.makedirs(cleanedtextdirectory, exist_ok=True)

# 获取working_set目录下的所有文件名
working_set_dir = corpora + 'working_set/'
filenames = [f for f in os.listdir(working_set_dir) if os.path.isfile(os.path.join(working_set_dir, f))]

for filename in filenames:
    # 拼接完整的输入文件路径
    input_file_path = os.path.join(working_set_dir, filename)
    # 只读模式打开文件
    with open(input_file_path, "r", encoding="utf-8") as objName:
        read_content = objName.read()
    
    # 清理文本:移除标点+转小写
    txt = ''.join(c for c in read_content if c not in string.punctuation).lower()
    # 替换多余空格(如果你的需求不同,可以修改正则表达式)
    txt = regex.sub(r"\s+", " ", txt).strip()
    
    # 拼接完整的输出文件路径
    output_file_path = os.path.join(cleanedtextdirectory, filename)
    # 写入模式打开文件并写入内容
    with open(output_file_path, "w", encoding="utf-8") as output_file:
        output_file.write(txt)

print(f"Done! Check out {cleanedtextdirectory} on your hard drive to see the results.")

关键修复点说明

  • 用os.listdir()获取目标目录下的所有文件,避免遍历字符串的错误。
  • 用os.makedirs()提前创建输出目录,防止因为目录不存在报错。
  • 使用os.path.join()拼接路径,避免不同操作系统下的路径分隔符问题。
  • 用with语句打开文件,不用手动调用close(),更安全。
  • 补充了编码参数encoding="utf-8",避免中文或特殊字符读取/写入乱码。
  • 修正了文本处理的变量,用读取到的read_content代替未定义的working_set。
  • 完善了regex.sub的逻辑,替换多余空格(如果你的需求不同,可以修改正则表达式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:25:26