使用DictReader从python中的csv行中读取列表作为列表

如何解决使用DictReader从python中的csv行中读取列表作为列表

我的CSV文件如下:

    id,name,list
    1,Beans,[1,2,3]
    2,Spam,[5,6,7]
    5,[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,3]
[5,7]
[7,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

with open

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

# into
id,"[1,3]"
2,"[5,7]"
5,"[7,9]"
6,"[]"
,

如果您无法更改输入文件,则仍可以使用以下代码来处理输入文件,以处理列表列-

with open('test.csv',newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    stringVal = ","
    for row in reader:
        newList = row['list'] + "," + stringVal.join(row[None])
        print(newList)
,

问题与您的csv文件有关。如果那是实际文件的外观,那么它将按照您所说的那样进行。将列表用双引号引起来,如下所示:

    id,list
    1,3]"
    2,7]"
    5,9]"
,

您可以这样引用csv文件:

"id","name","list"
"1","Beans",3]"
"2","Spam",7]"
"5",9]"

然后,您可以使用带有可选参数csv的{​​{1}}模块进行阅读。 之后,您可以将这些“字符串列表”转换为常规列表。 e.x.如果这些“字符串列表”仅是数字,则可以过滤结果,然后将其转换为整数。这是代码:

quoting=csv.QUOTE_ALL

结果:

import csv

with open('test.csv','r') as fh:
    data = list(csv.reader(fh,quoting=csv.QUOTE_ALL))
    for i in range(1,4):
      data[i][2] = list(filter(lambda c: str.isnumeric(c),data[i][2]))
      data[i][2] = list(map(lambda c: int(c),data[i][2]))
    print(*data,sep='\n')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-