Python无csv模块拆分CSV文件并转换为3D数组技术咨询
嘿,这两个CSV处理的问题我刚好有经验,给你详细说说!
1. 如何在Python中通过逗号拆分CSV文件?
拆分CSV文件要分两种情况,毕竟CSV里有时候会有被引号包裹的逗号(比如单元格内容是"张三,李四"),这种直接用split(',')会出错,得区别处理:
简单场景(无引号包裹的逗号)
如果你的CSV里没有带逗号的单元格,直接读取每行后用split(',')拆分就行,简单粗暴:
with open('your_file.csv', 'r', encoding='utf-8') as f: for line in f: # 先去掉换行符,再拆分 row_data = line.strip().split(',') print(row_data) # 每行都会被拆成一个列表
复杂场景(含引号包裹的逗号)
要是CSV里有带逗号的单元格,就得手动处理引号逻辑——判断当前是否在引号内,只有不在引号里的逗号才用来拆分:
def split_csv_line(line): parts = [] current_part = [] in_quotes = False # 标记是否处于引号内部 for char in line.strip(): if char == '"': # 遇到引号就切换标记状态 in_quotes = not in_quotes elif char == ',' and not in_quotes: # 只有不在引号里的逗号才拆分 parts.append(''.join(current_part)) current_part = [] else: # 其他字符直接加入当前单元格 current_part.append(char) # 别忘了添加最后一个单元格 parts.append(''.join(current_part)) return parts # 使用示例 with open('your_file.csv', 'r', encoding='utf-8') as f: for line in f: row_data = split_csv_line(line) print(row_data)
2. 不使用csv模块将CSV文件转换为3D数组?
首先我默认你说的3D数组是**「行 → 单元格 → 单元格内的子元素」**的结构(比如单元格内容是"1,2,3",拆成['1','2','3']),实现思路是先把每行拆成单元格列表(二维),再把每个单元格拆成子元素列表(升级为三维):
直接用上面的split_csv_line函数处理每行,然后对每个单元格再做一次逗号拆分:
def split_csv_line(line): parts = [] current_part = [] in_quotes = False for char in line.strip(): if char == '"': in_quotes = not in_quotes elif char == ',' and not in_quotes: parts.append(''.join(current_part)) current_part = [] else: current_part.append(char) parts.append(''.join(current_part)) return parts def csv_to_3d_array(file_path): three_d_array = [] with open(file_path, 'r', encoding='utf-8') as f: for line in f: # 第一步:拆分出当前行的所有单元格(二维结构的一行) row_cells = split_csv_line(line) # 第二步:把每个单元格再拆成子元素,得到三维结构的一行 three_d_row = [cell.split(',') for cell in row_cells] three_d_array.append(three_d_row) return three_d_array # 测试一下 my_3d_data = csv_to_3d_array('test.csv') print(my_3d_data)
举个例子,如果你的test.csv内容是:
"apple,banana","cherry" "dog,cat","elephant,frog"
运行后得到的3D数组就是:
[ [['apple', 'banana'], ['cherry']], [['dog', 'cat'], ['elephant', 'frog']] ]
内容的提问来源于stack exchange,提问作者Ethan Wallace
相关产品推荐
相关产品推荐

