【问题标题】:Create a new variable each time in a for loop [duplicate]每次在for循环中创建一个新变量[重复]
【发布时间】:2020-10-20 21:57:56
【问题描述】:

我创建了一个功能,提示用户输入他想要打开和阅读的 csv 文件的数量和名称。

在检查是否已读取正确的文件名并将其附加到列表后,我希望该函数打开每个文件并将文件的每一列添加到新变量中。

files = ['file_a','file_b','file_c','file_d']

这些是将存储每个文件的特征值的变量。

data1 = []
data2 = []
data3 = []
data4 = []
data5 = []

然后我在每个变量中附加了单独的特征

for row in file:
        rows = row.split(',')

        try:
            data1.append((rows[0]))
            data2.append(float(rows[1]))
            data3.append(float(rows[2]))
            data4.append(float(rows[3]))
            data5.append(float(rows[4]))
        except IndexError:
            continue

在该循环关闭之前,虽然我想要创建一个新变量,该变量将分别保存每个 csv 文件的 data1 到 data5 并且可以返回,以便我可以在我的脚本中进一步使用它。 有没有办法做到这一点?

【问题讨论】:

标签: python csv for-loop variables


【解决方案1】:
all_data = [ data1, data2, data3, data4, data5]

或将连接的值保持在一起,获取元组列表

all_data = list(zip(data1, data2, data3, data4, data5))

【讨论】:

    【解决方案2】:

    简答使用 exec 函数:

    exec('data1 = [];data2 = []; #etc')
    

    Exec 将字符串解析为 python 代码,甚至可以创建变量。

    但是,您应该使用列表来存储数据。我正在使用 pandas 读取 CSV,您可以随心所欲。

    import pandas as pd
    files = ['file_a','file_b','file_c','file_d']
    
    data = []
    for file in file:
        data.append(pd.read_csv(file))
    
    ### acessing data1
    do_stuff(data[0])
    do_other_stuff(data[1])
    

    这种编码方式很容易,可扩展,因为它不依赖于用户输入正确的输入,并且您不需要为一行代码加载整个数据字符串。而且它更安全,因为它阻止用户编写诸如 ('import sys; sys.exit()') 之类的东西,这些东西会提前使程序崩溃或编写会以意想不到的方式使用你的程序的代码

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 2011-10-22
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多