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

使用Python csv库读取贝尔字符分隔CSV时遇TypeError求助

问题解决:用csv库读取贝尔字符分隔的CSV文件

错误原因

你代码里的delimiter=r'\a'是长度为2的字符串(包含反斜杠和字母a),而csv库要求delimiter必须是单个字符的字符串,这就是触发TypeError: "delimiter" must be a 1-character string的原因。

贝尔字符(ASCII 0x07)在Python中需要用单个字符的形式表示:要么用转义符'\a',要么用chr(7)直接生成对应ASCII码的字符。

修正后的代码

import csv

def main():
    columns = ['col1', 'col2', 'col3']
    try:
        csv_dict_list = []
        # 使用'\a'作为分隔符,对应贝尔字符ASCII 0x07
        with open("bell.csv", "r") as file:
            reader = csv.DictReader(
                file,
                delimiter='\a',  # 替换r'\a'为'\a'
                quoting=csv.QUOTE_ALL,
                skipinitialspace=True,
                fieldnames=columns
            )
            for row in reader:
                # 按照数据类型转换:col1和col3转整数
                row['col1'] = int(row['col1'])
                row['col3'] = int(row['col3'])
                print(row)
                csv_dict_list.append(row)
        return csv_dict_list
    except Exception as e:
        raise Exception(f"Unable to read file: {e}")

if __name__ == "__main__":
    main()

关键说明

  • 分隔符必须用'\a'或chr(7):这两个都是单个字符,符合csv库对delimiter的要求,对应ASCII 0x07的贝尔字符。
  • 数据类型转换:根据你给出的[integer, string, integer]类型定义,读取后手动将col1和col3转换为整数,避免保留字符串类型。
  • 保留quoting=csv.QUOTE_ALL:你的示例数据所有字段都用双引号包裹,这个配置能正确解析带引号的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:16