首页 > 解决方案 > 如何从 csv 文件中的数据创建非连续整数的循环?

问题描述

我正在使用 python 来分解一个 csv 文件。每个文件都有三列,其中一列只是整数。整数不是连续的,对于每个整数,我想提取多行数据并写入单独的 .dat 文件。例如,我想提取 7 或 8 个不同整数的所有数据,例如 0、1、2、3、6、7、9 或 6、7、9、13、14、16、18、21、22。 csv 文件中的表格如下所示:

0,0,0.751622894
0,0.760816637,0.732487133
1,0.01176769,0.761377432
1,0.263682475,0.770548537
1,0.768830839,0.731812798
2,0.020187674,0.764187624
2,0.777022572,0.74336139
3,0.046867867,0.771258565
6,0.83768704,0.756484441
7,0.104007101,0.785597332
9,0.847070758,0.751622894
9,0.867841745,0.754397082
13,0.923966523,0.764187624
14,0.176667512,0.795060175
16,0.993608927,0.772680585
18,0.00887649,0.776247117
21,0.01285823,0.779112191
21,0.257595739,0.798730006
21,0.77428354,0.767008188
22,0.527212782,0.719780373
22,0.78840984,0.764891791

我有代码,但它只有在整数是连续的情况下才有效。

    starting_rotation_list = []   
    i=0
    #current rotation leaving the last loop is the max rotation number
    while(i < current_rotation):
        if i in Dict.keys():
            if i+1 in Dict.keys():
                if i+2 in Dict.keys():
                    if i+3 in Dict.keys():
                        if i+4 in Dict.keys():
                            if i+5 in Dict.keys():
                                if i+6 in Dict.keys():
                                    starting_rotation_list.append(i)
    i = i+1

代码运行没有错误,但没有创建所需的 .dat 填充,因为整数不连续。如果我将循环编码为运行更少的整数,比如 2 或 3,它也可以正常工作,但我需要它适用于 7 或 8。

标签: pythonpython-3.x

解决方案


您可以使用 adefaultdict来收集与您想要的整数匹配的每一行。一旦在结果字典中读取了所有行,就data可以一次将一个写入到不同的输出 CSV 文件中。下面显示了如何做到这一点,输出 CSV 文件名具有格式output_0.csv等...

from collections import defaultdict
import csv

req_values = [0, 1, 2, 3, 6, 7, 9]
data = defaultdict(list)

with open('input.csv') as f_input:
    csv_input = csv.reader(f_input)

    for row in csv_input:
        if int(row[0]) in req_values:
            data[row[0]].append(row)

for value in data:
    with open(f'output_{value}.csv', 'w', newline='') as f_output:
        csv_output = csv.writer(f_output)
        csv_output.writerows(data[value])

推荐阅读