使用Python代码块将Google Sheets原始行转换为嵌套列表
解决方案:将类列表字符串转换为嵌套列表(含CSV单元格拆分)
步骤说明
- 解析外层类列表字符串:用
ast.literal_eval()替代正则,安全地将类似列表的字符串转为真实Python列表,避免正则匹配引号、逗号等边界的麻烦。 - 拆分CSV格式单元格:对列表中的每个元素,判断是否为CSV格式(或直接尝试解析),用
csv模块处理复杂CSV(含引号包裹的字段),简单场景可直接用split(',')。
代码实现
import ast import csv from io import StringIO def convert_to_nested_list(row_str): # 第一步:将类列表字符串转为普通列表 raw_list = ast.literal_eval(row_str) nested_list = [] for item in raw_list: # 尝试解析为CSV(处理带引号的复杂场景) try: # 用StringIO模拟文件对象,传入csv.reader csv_reader = csv.reader(StringIO(item)) # 取第一行(单个单元格的CSV就是一行) csv_items = next(csv_reader) # 拆分后元素数量>1才视为CSV,避免误拆含逗号的普通文本 if len(csv_items) > 1: nested_list.append(csv_items) else: nested_list.append(item) except: # 解析失败则保留原元素 nested_list.append(item) return nested_list # 测试示例 raw_row_str = "['John Doe', 'john@example.com', 'apple,banana,\"red orange\"', 'USA']" result = convert_to_nested_list(raw_row_str) print(result) # 输出: ['John Doe', 'john@example.com', ['apple', 'banana', 'red orange'], 'USA']
关键细节
ast.literal_eval()的优势:不会执行任意代码,仅解析Python字面量(列表、字符串等),比eval()更安全,完美适配Zapier中传入的类列表字符串。csv模块的必要性:如果CSV单元格包含带逗号的引号字段(如"red orange,grape"),直接split(',')会拆错,csv.reader能正确识别引号包裹的字段。- 异常处理:避免因普通文本含逗号(非CSV)导致解析失败,确保所有元素都能被正确保留。
内容的提问来源于stack exchange,提问作者FrenchConnections
相关产品推荐
相关产品推荐

