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

实现书籍信息二维列表函数时遇Errno 2文件未找到错误,求解决

错误原因分析与代码修正

一、文件找不到错误(Errno 2)的原因及解决

出现[Errno 2] No such file or directory: 'NYT_short.txt'的核心原因是程序无法定位目标文件,具体可能是以下情况之一:

  • 文件不存在:确认NYT_short.txt是否真的创建在当前脚本的运行目录下
  • 路径错误:如果文件在其他文件夹,需要传入完整绝对路径(例如Windows下的C:/Users/xxx/Documents/NYT_short.txt,Linux/macOS下的/home/xxx/NYT_short.txt)
  • 文件名拼写错误:检查文件名的大小写、字符是否和实际文件完全匹配(比如实际是nyt_short.txt而非大写开头)

二、代码中的其他错误及完整修正版

即使解决了文件问题,你的代码还存在语法、逻辑错误,以下是修正后的完整代码及错误说明:

原代码的问题点:

  1. 语法错误:函数调用时字符串未闭合:createbooks2Dlist("NYT_short.txt) 缺少右侧双引号
  2. 逻辑错误:splitlines()已经将文件内容按行拆分为列表,循环内再执行i.split("\n")会导致索引越界(单个行字符串按\n分割后仅含一个元素)
  3. 变量名错误:使用未定义的name变量(实际定义的是title),且publisherbookgenre是错误的变量拼接(应为publisher和bookgenre两个独立字段)
  4. 日期格式错误:拼接的日期是年-日-月,不符合常规的年-月-日格式
  5. 资源泄漏:直接open()文件未关闭,可能导致文件句柄泄漏

修正后的代码:

def createbooks2Dlist(file_name):
    # 使用with语句安全管理文件,自动关闭句柄
    with open(file_name, 'r', encoding='utf-8') as f:
        # 读取所有行并过滤空行
        doc = [line.strip() for line in f if line.strip()]
    
    list2Dlist = []
    # 假设每本书的信息占5行(标题、作者、出版社、日期、类型),按步长5遍历
    # 如果你的文件是每行用分隔符(如逗号)存储单本书的所有信息,需将此处改为按行分割字段
    for idx in range(0, len(doc), 5):
        title = doc[idx]
        author = doc[idx+1]
        publisher = doc[idx+2]
        date_str = doc[idx+3]
        bookgenre = doc[idx+4]
        
        # 处理日期格式,自动补0简化代码
        date_parts = date_str.split("/")
        if len(date_parts) == 3:
            day = date_parts[0].zfill(2)
            month = date_parts[1].zfill(2)
            year = date_parts[2]
            final_date = f"{year}-{month}-{day}"  # 标准年-月-日格式
        else:
            # 日期格式异常时保留原字符串
            final_date = date_str
        
        # 添加正确的字段到二维列表
        list2Dlist.append([final_date, title, author, publisher, bookgenre])
    
    return list2Dlist

# 修正字符串未闭合问题,确保文件路径正确
books = createbooks2Dlist("NYT_short.txt")
print(books)

关键修正说明:

  • 用with语句处理文件操作,避免资源泄漏
  • 调整遍历逻辑适配"每本书占5行"的文件格式(如果你的文件是单行多字段,需将循环内逻辑改为fields = doc[idx].split(",")类的分割方式)
  • 用zfill(2)简化日期补0逻辑,替代冗余的条件判断
  • 修正变量名错误,确保字段对应正确
  • 添加日期格式容错处理,避免格式异常导致崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:55:31