python - 如何正确读取带单引号的 csv 文件?
问题描述
尝试读取.csv
-file,其中的行如下所示:
gif,940ff2312-4325-8898dfs-9ce1ca56c5sfb,'[{"mid": "/m/083dsf", "description": "buff", "probability": 0.9663228988647461, "topic": 0.9663228988647461}]'
我需要阅读这些行并将其放入两个列表中:gif
和bif
. 每个列表必须包含对元组:第一个字符串(在我的示例中为 'gif'),字典列表(在我的示例中单引号中的第三个元素)。
我不知道如何正确解析它,因为read_csv
这样做会引发错误。尝试了简单的字符串方法,它可以工作,但是修复字典列表很复杂,我认为它不是很好/不是最优的。试过 JSON --- 不工作。
这是我的方法:
gif = []
bif = []
with open('file.csv', 'r', encoding = 'utf-8') as file:
lines = file.readlines()
for line in lines:
obj = line[:line.find(',')]
arr = line[line.find('['):-2]
json_acceptable_string = arr.replace("'", "\"")
arr = json.loads(json_acceptable_string)
if obj == 'gif':
gif.append((obj, arr))
elif obj == 'bif':
bif.append((obj, arr))
任何想法如何解决它?也许有一些误解和好的技巧pandas
?
UPD:我也试过这样:
import csv
gif = []
bif = []
with open('file.csv', 'rt', encoding='utf-8') as file:
csv_reader = csv.reader(file, delimiter=',', quotechar="'")
for line in csv_reader:
for obj, Id, objArr in line: # here I'm trying to split it in 3 objects
if obj == 'gif':
gif.append((obj, arr))
elif obj == 'bif':
bif.append((obj, arr))
但它提出了:
ValueError: too many values to unpack (expected 3)
解决方案
您可以使用quotechar
format 参数正确解析单引号 JSON 字符串:
import csv
with open('file.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',', quotechar="'")
for row in reader:
print(row)
# If you want to parse the json, you can do:
# `json.loads(row[-1])` (requires the json module)
# Kudos to @juanpa.arrivillaga for the suggestion!
根据您提供的示例数据,这会产生以下输出:
['gif',
'940ff2312-4325-8898dfs-9ce1ca56c5sfb',
'[{"mid": "/m/083dsf", "description": "buff", "probability": 0.9663228988647461, "topic": 0.9663228988647461}]']
推荐阅读
- javascript - 是否可以使用 Chrome 的文件系统访问 API 附加到现有文件
- python - 将颜色条的范围添加到熊猫子图
- postgresql - 在干净的 Ubuntu 版本上安装后如何运行 PostgreSQL?
- python - 如何在 mongo 文档中进行模糊文本搜索?
- laravel - Laravel 调度程序在每月的第一个星期一运行任务
- c++ - 我正在研究一个应该构建一个库的makefile,然后在构建整个程序时也包含该库
- amazon-web-services - 为 ECS 中的容器指定磁盘大小
- python - Python Selenium - 等到元素可见
- excel - 为什么使用 office.js 在 excel 范围内粘贴数据需要太长时间?
- apache-spark - 如何在运行时火花流应用程序中强制执行模式验证?