gpt4 book ai didi

python - 使用 DictReader 从 python 中的 csv 行 'as a list' 中读取列表

转载 作者:行者123 更新时间:2023-12-04 01:15:59 27 4
gpt4 key购买 nike

我的 CSV 文件如下所示:

    id,name,list
1,Beans,[1,2,3]
2,Spam,[5,6,7]
5,Spam,[7,8,9]

当我尝试使用以下代码阅读最后一列时:

with open('some.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row["list"])

我得到的输出是:

[1
[5
[7

显然,它在第一个“,”处分隔列表。但是我希望它将整个列表作为一列来阅读。所以我的预期输出是:

[1,2,3]
[5,6,7]
[7,8,9]

我计划将这些中的每一个都存储在变量中,以便可以像使用普通列表一样使用它们来迭代它或执行其他任务。

我如何实现这一点?

最佳答案

  • 问题是 CSV 格式不正确,列表周围用双引号引起来
    • 通过将 lists 列用双引号引起来修复 CSV 文件
      • list 是一种 python 数据类型,因此绝不能将其用作变量名。
  • 使用这个solution对于 pandas
import pandas as pd
from ast import literal_eval

# fix the csv file by wrapping the list with quotes
with open('test.csv', 'r+', newline='') as f:
rows = [s.replace(',[', ',"[').replace(']', ']"').strip() for s in f.readlines()]
f.seek(0)
f.truncate()
f.writelines(s + '\n' for s in rows)


# read the csv and evaluate the list column as lists
df = pd.read_csv('test.csv', converters={'lists': literal_eval})

# display(df)
id name lists
0 1 Beans [1, 2, 3]
1 2 Spam [5, 6, 7]
2 5 Spam [7, 8, 9]
3 6 Steak []

print(type(df.loc[0, 'lists']))
[out]:
list

打开

# converts
id,name,lists
1,Beans,[1,2,3]
2,Spam,[5,6,7]
5,Spam,[7,8,9]
6,Steak,[]

# into
id,name,lists
1,Beans,"[1,2,3]"
2,Spam,"[5,6,7]"
5,Spam,"[7,8,9]"
6,Steak,"[]"

关于python - 使用 DictReader 从 python 中的 csv 行 'as a list' 中读取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63367008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com