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

如何不使用csv模块,用基础函数解析含文本逗号的CSV文件?

嘿,这个场景我太熟悉了!没法用csv模块的话,咱们用Python最基础的字符串操作就能搞定——核心思路就是先把引号里的逗号临时替换成别的字符,避免拆分的时候被误拆,等拆分完再换回来就行,全是入门级函数,一步步来:

假设你的文件内容是:

A,B,C,D
'1','a,b,c,d','3','4'

完整实现代码

# 1. 读取文件内容
with open('your_file.csv', 'r', encoding='utf-8') as f:
    all_lines = f.read().splitlines()

# 处理表头(表头没有引号,直接按逗号拆分)
header = all_lines[0].split(',')
# 处理数据行
data_line = all_lines[1]

# 2. 定义一个临时字符,选一个肯定不会出现在你数据里的符号,比如|
temp_sep = '|'

# 3. 按单引号拆分字符串,这样奇数位置的元素就是被引号包裹的内容
split_by_quote = data_line.split("'")

# 4. 遍历拆分后的列表,把引号里的逗号替换成临时字符
for idx in range(len(split_by_quote)):
    # 奇数索引的部分是被单引号包起来的内容,比如'a,b,c,d'
    if idx % 2 == 1:
        split_by_quote[idx] = split_by_quote[idx].replace(',', temp_sep)

# 5. 把列表重新拼接成字符串,再按逗号拆分
processed_str = ''.join(split_by_quote)
raw_items = processed_str.split(',')

# 6. 最后清理每个元素:去掉首尾的单引号,把临时字符换回逗号
final_data = [item.strip("'").replace(temp_sep, ',') for item in raw_items]

# 输出结果
print("解析后的表头:", header)
print("解析后的数据列表:", final_data)

代码解释

咱们一步步拆解逻辑:

  • 拆分引号:用split("'")把字符串拆成列表后,奇数位置的元素都是被单引号包裹的内容(比如split_by_quote[1]是'1'里的1,split_by_quote[3]是'a,b,c,d'里的a,b,c,d)
  • 替换内部逗号:把这些引号里的逗号换成临时符号,这样后面按逗号拆分的时候,就不会把a,b,c,d拆成四个元素了
  • 还原逗号:拆分完成后,再把临时符号换回逗号,同时去掉每个元素首尾的单引号,就得到了咱们想要的列表

运行之后输出就是:

解析后的表头: ['A', 'B', 'C', 'D']
解析后的数据列表: ['1', 'a,b,c,d', '3', '4']

如果你的数据里用的是双引号,只要把代码里的split("'")改成split('"'),strip("'")改成strip('"')就行,非常灵活。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:17:39