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

Python指定编号读取CSV异常:选中文件后显示后续所有文件内容

问题:通过编号选择CSV文件时,会显示选中文件及后续所有文件内容

我写了个Python程序,用来展示目录下的CSV文件,用户输入文件编号就能查看对应内容。现在文件列表能正常显示,但输入编号后,会把选中的CSV内容和它之后的所有CSV内容都显示出来。我调过变量p的值没用,直接通过文件名打开是正常的,但有些文件名太长,还是想用编号选文件。

测试情况:输入1时,会显示Herman.csv和Jemma.csv的内容;输入2时,只显示Jemma.csv的内容。

原程序代码:

def seeProject():
    y = 1
    p = 0
    for x in os.listdir():
        if x.endswith(".csv"):
            print(str(y)+". " + x)
            y = y+1
    f = input("Which would you like to open?\n")
    for x in os.listdir():
        if x.endswith(".csv") and p == int(f):
            j = open(x,"r")
            for w in j:
                print(w)
        else:
            p += 1
            continue

问题原因

你的第二个循环逻辑有漏洞:

  • 只有当文件是CSV且p等于输入编号时,才会打开文件;否则p加1并跳过
  • 但当p等于编号并打开文件后,后续循环里p的值不会再递增,导致后面所有CSV文件都会满足p == int(f)的条件,所以会被逐个打开显示

修复方案

正确的思路是先把所有CSV文件收集到一个列表里,通过编号直接索引列表获取目标文件,逻辑更清晰且不易出错:

import os

def seeProject():
    # 一次性收集所有CSV文件到列表
    csv_files = [file for file in os.listdir() if file.endswith(".csv")]
    
    # 展示带编号的文件列表
    for idx, file in enumerate(csv_files, start=1):
        print(f"{idx}. {file}")
    
    # 处理用户输入并打开文件
    try:
        selected_num = int(input("Which would you like to open?\n"))
        # 验证编号有效性
        if 1 <= selected_num <= len(csv_files):
            target_file = csv_files[selected_num - 1]  # 列表索引从0开始,编号从1开始
            with open(target_file, "r") as f:
                for line in f:
                    print(line, end="")  # 避免重复换行(文件每行自带换行符)
        else:
            print("无效编号,请输入列表中的数字")
    except ValueError:
        print("请输入有效的整数")

seeProject()

修复亮点

  • 仅遍历一次目录,比原代码效率更高
  • 用enumerate自动生成编号,无需手动维护计数变量
  • 增加输入验证,处理非整数输入和超出范围的编号
  • 使用with语句管理文件,自动关闭文件,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:25