如何用Python csv库提取每行的ID与URL两个独立值(含数组型URL)
解决CSV读取时URL字段拆分错误的问题
你的CSV文件中URL字段存在两种格式:单个字符串或带转义双引号的JSON数组字符串,常规csv.reader会误将数组内的逗号识别为字段分隔符,导致拆分错误。以下是两种可行的解决方案:
方案1:配置csv.reader识别转义字符
由于你的URL字段内的双引号使用反斜杠\转义,只需给csv.reader指定escapechar='\\'参数,就能让它将整个URL字段视为单个元素读取:
import csv def loadList(fileName): li = list() # 使用with语句自动管理文件,无需手动close with open(fileName, "r", newline='') as inpFile: # 设置escapechar识别反斜杠转义的双引号 csvreader = csv.reader(inpFile, escapechar='\\') next(csvreader) # 跳过表头行 for row in csvreader: object_id = row[0] url = row[1] li.append({"objectId": object_id, "url": url}) print(f"ID: {object_id}, URL: {url}\n") return li
执行后,第二行数据会被正确解析为:
- ID:
2,URL:"["SomeUrl2","SomeUrl3"]"(原始字符串形式)
方案2:转为Python对应类型(可选)
如果需要将URL数组字符串转为Python列表,可结合json模块解析(因为你的数组格式符合JSON规范):
import csv import json def loadList(fileName): li = list() with open(fileName, "r", newline='') as inpFile: reader = csv.DictReader(inpFile, escapechar='\\') for row in reader: object_id = row['objectId'] url = row['url'] # 尝试解析JSON,失败则保留原字符串 try: url_data = json.loads(url) except ValueError: url_data = url li.append({"objectId": object_id, "url": url_data}) print(f"ID: {object_id}, URL: {url_data}\n") return li
这种方式下:
- 第一行URL保持为字符串
"someUrl1" - 第二行URL转为Python列表
["SomeUrl2", "SomeUrl3"]
为什么原代码会出错?
csv.reader默认不处理反斜杠转义的双引号(默认escapechar=None),因此会将URL字段内的逗号当成字段分隔符,导致第二行被错误拆分为多个元素。设置escapechar='\\'后,反斜杠后的双引号会被视为字段内的普通字符,不会触发字段结束。
内容的提问来源于stack exchange,提问作者Tushar Ahuja
相关产品推荐
相关产品推荐

