python - 如何从 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。
解决方案
您可以使用 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])
推荐阅读
- sql-server - 如何让我的 Blazor 应用查看我的本地 SQL Server 以进行身份验证?
- android - 如何使用 firebaes 实时数据库或 firestore 使投票仅在特定时间内有效?
- azure - 将并行执行的多个 TB 文件加载到 AZURE 云 SQL 数据库中
- python - 如何使用 Boto3 将空文件夹上传到 S3?
- c++ - Bellman Ford 将 Source & Destination 解析为字符而不是整数
- python - 如何通过 API 使用 For Loop 从 Google Drive 下载文件
- java - 使用 Apache Spark 和 Java 按列分组并将每组字符串写入文本文件
- mariadb - 将系统版本化(临时)MariaDB 数据库从 Windows 移动到 Linux
- reactjs - 如何为我的 React CMS 应用程序创建添加文件夹功能?
- java - 无法在 rest api 中返回媒体类型“application/xml”的对象列表