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

使用Python开发CSV票务系统时读取CSV文件功能异常如何解决

问题修复方案

存在的问题

  • 读取csv时未指定分隔符:写入时用制表符\t作为分隔符,读取时csv.reader默认使用逗号分隔,导致整行被识别为单个字段
  • 写入逻辑错误:循环收集了所有乘客的姓名、年龄、性别列表后,仅写入了最后一次输入的单条数据,循环逻辑完全失效
  • 输出格式错误:直接打印csv.reader返回的列表对象,没有转换为空格分隔的普通字符串
  • 文件打开缺少newline=''参数:Windows系统下会自动生成多余空行,导致读取结果中出现空列表

修复后完整代码

import sys, select, os, csv
from os import system

def option_1():
    with open(input("\nInput file name with .csv extension: "), 'w+', newline='') as f:
        people = int(input("\nHow many tickets: "))
        name_l = []
        age_l = []
        sex_l = []  

        for p in range(people):
            name = str(input("\nName: "))
            name_l.append(name)
            age = str(input("\nAge: "))
            age_l.append(age)
            sex = str(input("\nGender: "))
            sex_l.append(sex)

        field_names = ['Name', 'Age', 'Gender']
        writer = csv.DictWriter(f, fieldnames = field_names, delimiter = '\t')
        writer.writeheader()

        writer = csv.writer(f, delimiter = '\t')
        # 修复循环逻辑,写入所有收集到的乘客信息
        for i in range(people):
            writer.writerow([name_l[i], age_l[i], sex_l[i]])

def option_2():
    with open(input('Input file name with .csv extension: '), 'a+', newline='') as f:
        people = int(input("\nHow many tickets: "))
        name_l = []
        age_l = []
        sex_l = []  

        for p in range(people):
            name = str(input("\nName: "))
            name_l.append(name)
            age = str(input("\nAge: "))
            age_l.append(age)
            sex = str(input("\nGender: "))
            sex_l.append(sex)

        writer = csv.writer(f, delimiter = '\t')
        # 修复循环逻辑,写入所有新增的乘客信息
        for i in range(people):
            writer.writerow([name_l[i], age_l[i], sex_l[i]])

def option_3():
    with open(input("\nInput file name with .csv extension: "), 'r', newline='') as f:
        # 读取时指定分隔符为制表符
        f_reader = csv.reader(f, delimiter='\t')
        for row in f_reader:
            if row: # 跳过空行
                # 转换为空格分隔的字符串打印
                print(' '.join(row))


def main():
    system('cls')
    print("\nTicket Booking System\n")
    print("\n1. Ticket Reservation")
    print("\n2. Append to an existing file")
    print("\n3. Read from an existing file")
    print("\n0. Exit Menu")
    print('\n') 

    while True:
        option = int(input("Choose an option: "))
        if option < 0 or option > 3:
            print("Please choose a number according to the menu!")
        else:
            while True:
                if option == 1:
                    system('cls')
                    option_1()
                    user_input=input("\nPress ENTER to return to main menu: \n")
                    if((not user_input) or (int(user_input)<=0)):
                        main()
                elif option == 2:       
                    system('cls')
                    option_2()
                    user_input=input("\nPress ENTER to return to main menu: \n")
                    if((not user_input) or (int(user_input)<=0)):
                        main()
                elif option == 3:       
                    system('cls')
                    option_3()
                    user_input=input("\nPress ENTER to return to main menu: \n")
                    if((not user_input) or (int(user_input)<=0)):
                        main()
                else:
                    exit()

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:04