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

Python 3中如何处理含逗号的输入内容以正常导出CSV?

问题:含逗号的卡牌名称导致CSV导出异常

问题根源

CSV格式默认用逗号作为字段分隔符,当卡牌名称(如Azusa, Lost but Seeking)包含逗号时,pandas读取TXT文件并当作CSV解析时,会把逗号误判为字段分割符,认为一行有多个字段,因此跳过这些行,导致导出的CSV不完整。

解决方案

方案1:直接生成规范CSV(推荐,同时优化卡组存储)

先把卡组从「重复存卡牌名的列表」改成「卡牌名+数量的字典」,既节省内存,又能更灵活地导出文件,同时用Python内置csv模块自动处理含逗号的字段。

1. 优化卡牌添加函数

# 初始化卡组为字典,键是卡牌名,值是数量
deck = {}

def card_adder(deck_dict):
    next_one = input("ADD: ").strip()
    # 确保输入的数量是整数
    while True:
        try:
            copies = int(input("How many? ").strip())
            break
        except ValueError:
            print("请输入有效的数字")
    # 更新卡组字典
    if next_one in deck_dict:
        deck_dict[next_one] += copies
    else:
        deck_dict[next_one] = copies
    # 计算总卡牌数
    total_cards = sum(deck_dict.values())
    print(f"There are currently {total_cards} cards in the deck.")

2. 修改导出函数

import csv

def exporter(deck_dict):
    deckname = input("Deck name: ").strip()
    # 导出TXT文件(保持原有格式,每行一个卡牌名)
    with open(f"{deckname}.txt", "w", encoding="utf-8") as txt_file:
        for card_name, count in deck_dict.items():
            txt_file.write(f"{card_name}\n" * count)
    
    # 导出规范CSV文件(自动给含逗号的卡牌名加引号)
    with open(f"{deckname}.csv", "w", newline="", encoding="utf-8") as csv_file:
        # 设置quoting=csv.QUOTE_NONNUMERIC,自动给非数值字段加引号
        writer = csv.writer(csv_file, quoting=csv.QUOTE_NONNUMERIC)
        # 可选:添加表头
        writer.writerow(["Card Name"])
        # 按数量重复写入卡牌名
        for card_name, count in deck_dict.items():
            for _ in range(count):
                writer.writerow([card_name])
    
    # 可选:导出「卡牌名+数量」的紧凑CSV(更适合统计)
    # with open(f"{deckname}_summary.csv", "w", newline="", encoding="utf-8") as summary_csv:
    #     writer = csv.writer(summary_csv, quoting=csv.QUOTE_NONNUMERIC)
    #     writer.writerow(["Card Name", "Copies"])
    #     for card_name, count in deck_dict.items():
    #         writer.writerow([card_name, count])

方案2:保留原有列表存储,修改pandas读取逻辑

如果不想改动卡组的存储方式,只需修改exporter中pandas读取TXT的参数,告诉它正确识别带逗号的字段:

import pandas as pd

def exporter(seventyfive):
    deckname = input("Deck name: ")
    # 写入TXT文件逻辑不变
    with open(f"{deckname}.txt", "w", encoding="utf-8") as deck:
        for card in seventyfive:
            deck.write(card+"\n")
    
    # 修改pandas读取规则:识别带引号的字段,禁用逗号分割
    read_file = pd.read_csv(
        f"{deckname}.txt",
        header=None,  # 无表头
        names=["Card Name"],  # 给列命名
        quoting=pd.io.common.csv.QUOTE_ALL,  # 识别被引号包裹的字段
        quotechar='"',  # 指定引号字符
        sep="\n"  # 按行分割,而不是逗号
    )
    # 导出CSV时给非数值字段加引号
    read_file.to_csv(
        f"{deckname}.csv",
        index=None,
        quoting=pd.io.common.csv.QUOTE_NONNUMERIC
    )

效果验证

当输入含逗号的卡牌名(如Azusa, Lost but Seeking)时,导出的CSV会自动将该名称用双引号包裹("Azusa, Lost but Seeking"),pandas读取时不会再误判字段,所有卡牌都会被正确导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:27:54