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

如何不使用Pandas实现基于用户输入的DataFrame切片?

不用Pandas实现CSV行切片的解决方案

当然可以仅用Python标准库实现CSV文件的行切片,不需要依赖Pandas。先修正你原代码里的问题(比如重复打开文件、缺失范围解析逻辑),并实现需求功能:

修改后的完整代码

import csv
import sys

def dataSet_read():
    enter = input('Enter file path:')
    # 一次性读取所有行到内存,避免重复打开文件
    with open(enter, "r") as csvfile:
        reader_variable = csv.reader(csvfile, delimiter=",")
        all_rows = list(reader_variable)
    
    head_inp = input('Has the file headers? Select Y or N:\n').upper()
    header = []
    data_start_idx = 0  # 数据行的起始索引
    
    if head_inp == 'Y':
        header = all_rows[0]
        data_start_idx = 1
        print('\nFile headers:\n\n', header)
    elif head_inp == 'N':
        print("\nFile doesn't have headers")
    else:
        print('Incorrect selection!!!')
        sys.exit()
    
    rows_inp = input("\nPlease provide range which you'd like to see using ',', otherwise all dataset will open all dataset.\n")
    if rows_inp == '':
        # 输出所有行
        for row in all_rows:
            print(row)
    else:
        # 解析用户输入的范围
        parts = rows_inp.strip().split(',')
        start = 0
        end = len(all_rows)
        
        # 处理起始索引
        if parts[0].strip():
            try:
                start = int(parts[0]) - 1  # 转成Python列表的0-based索引
                # 若想让用户输入的行号从数据行开始计数,取消下面注释:
                # start += data_start_idx
            except ValueError:
                print('Invalid number format!')
                return
        # 处理结束索引
        if len(parts) > 1 and parts[1].strip():
            try:
                end = int(parts[1])  # 切片左闭右开,无需减1
            except ValueError:
                print('Invalid number format!')
                return
        
        # 确保索引在有效范围内
        start = max(start, 0)
        end = min(end, len(all_rows))
        
        # 输出切片后的行
        for row in all_rows[start:end]:
            print(row)

if __name__ == "__main__":
    dataSet_read()

关键逻辑说明

  • 一次性读取所有行:把CSV内容全部读入all_rows列表,既避免重复打开文件的资源浪费,也简化后续切片操作。
  • 索引适配:将用户输入的1-based行号(比如输入"2"表示第2行)转换为Python列表的0-based索引,符合语言本身的切片规则。
  • 多格式范围支持:兼容多种输入场景:
    • 2,5:输出第2到第5行(文件绝对行号)
    • 3,:输出从第3行到末尾的所有行
    • ,4:输出前4行
    • 6:仅输出第6行
  • 非法输入防护:加入数字格式校验,避免非数字输入导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:55:17