【问题标题】:Python - CSV rows into multiple listsPython - 将CSV行放入多个列表
【发布时间】:2021-08-31 06:04:11
【问题描述】:

我想将 csv 文件中的每一行转换为列表。但是下面的代码不起作用,而是将所有列转换为列表

def data():
import csv

f=open("mydata.csv","r")
reader=csv.reader(f)

Type=[]
BusPsngr=[]
Bus=[]
PersoVeh=[]
LoadTrks=[]



for row in reader:
    Type.append(row[0])
    BusPsngr.append(int(row[1]))
    Bus.append(int(row[2]))
    PersoVeh.append(int(row[3]))
    LoadTrks.append(int(row[4]))

my data

所以我的第一个列表应该是 List1=['Type','2000',........,'2012'] 等每一行。

【问题讨论】:

    标签: python python-3.x python-2.7 csv python-requests


    【解决方案1】:

    如果您只需要文件中的行列表,

    with open("mydata.csv") as f:
      lines = list(csv.reader(f))
    

    将使lines 类似于

    [
      ["Type", "2000", ...],
      ["Bus Pass", "...."],
    ]
    

    然后您可以将其解压缩为 5 个单独的列表:

    Type, BusPsngr, Bus, PersoVeh, LoadTrks = lines[:5]
    

    编辑

    如果您想跳过第一列,可以在阅读 CSV 时使用列表推导将其剪掉:

    with open("mydata.csv") as f:
      lines = [line[1:] for line in csv.reader(f)]
    

    编辑 2

    将数据读入字典(以防万一行的顺序与您预期的不同)并同时将值转换为整数...

    with open("mydata.csv") as f:
      data = {
        line[0]: [int(v) for v in line[1:]]
        for line
        in csv.reader(f)
      }
    print(set(data.keys()))
    Type = data["Type"]
    BusPsngr = data["Bus Passenger"]  # or whatever...
    

    【讨论】:

    • 如果我不希望每行的第一个元素包含在列表中怎么办?例如,第一个列表看起来像,Type=["2000","2001",..........,"2012"]。第二个列表是 BusPsngr=["317205","291425",........"410941"] 。如何做到这一点?
    • 成功了,抱歉,我还有一个问题 - 我希望每个列表中的所有元素都是整数而不是字符串。如何转换它们?
    • 我添加了另一个编辑。不过,我将输出设置为 dict,只是为了让原始文件的顺序与您预期的不同。
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 2021-07-02
    • 2013-10-16
    • 2015-07-23
    • 1970-01-01
    • 2013-01-14
    • 2018-03-05
    • 2012-01-02
    相关资源
    最近更新 更多