需要基于csv文件python中的列数创建多个变量

时间:2019-02-05 21:50:06

标签: python

这是我的csv文件长6列的示例:

0.0028,0.008,0.0014,0.008,0.0014,0.008,

我想使用这些数字作为值创建6个变量,以便稍后在程序中使用;但是,列数会根据我打开的确切csv文件而有所不同。

如果我要手动执行此操作,并且列数始终为6,则只需创建如下变量:

thickness_0 = (row[0])
thickness_1 = (row[1])
thickness_2 = (row[2])
thickness_3 = (row[3])
thickness_4 = (row[4])
thickness_5 = (row[5])

是否可以使用for循环创建这些变量,从而不必知道列数?意味着它将创建与列数相同数量的变量?

3 个答案:

答案 0 :(得分:0)

有很多方法可以做您想做的事,但这被认为是非常糟糕的做法,最好不要将源代码与数据混合在一起。

如果您的代码依赖于来自“外部世界”的动态数据,请使用字典(或您的情况下的列表)以编程方式访问数据。

答案 1 :(得分:0)

您可以使用字典

mydict = {}

    with open('StackupThick.csv', 'r') as infile:
        reader = csv.reader(infile, delimiter=',')
        for idx, row in enumerate(reader):
            key = "thickness_" + str(idx)
            mydict[key] = row

像这样调用您的值:

print(mydict['thickness_3'])

答案 2 :(得分:-1)

根据您的问题,我了解到您的csv文件只有一行,并以逗号分隔。如果是这样,并且如果您对dictionares不满意(例如@Mike C.答案),则可以使用globals()将变量添加到全局命名空间中,这是一个决定。

import csv

with open("yourfile.csv", "r", newline='') as yourfile:
    rd = csv.reader(yourfile, delimiter=',')
    row = next(rd)
    for i, j in enumerate(row):
        globals()['thickness_' + str(i)] = float(j)

现在您拥有任意数量的称为thickness_i的新变量,其中i是从0开始的数字。

请确保所有值都在csv文件的第一行中,因为此代码将忽略第一行以外的任何行。