使用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
相关产品推荐
相关产品推荐

