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

