如何从不同循环取数并按列写入同一文件(数组长度不同)
解决方案:将多数组生成的元素并排写入单个文件
原生Python实现(无需第三方库)
核心思路是先收集所有数组对应的element列表,再用itertools.zip_longest并行迭代不同长度的列表,补全缺失值后逐行写入文件。
代码示例
import itertools # ---------------------- # 第一步:遍历数组生成对应元素列表 # ---------------------- # 处理master_array_1 arr1_e1 = [] arr1_e2 = [] for item in master_array_1: # 替换成你实际生成element_1和element_2的逻辑 element_1 = item * 2 # 示例逻辑 element_2 = item + 1 # 示例逻辑 arr1_e1.append(element_1) arr1_e2.append(element_2) # 处理master_array_2 arr2_e1 = [] arr2_e2 = [] for item in master_array_2: element_1 = item ** 2 # 示例逻辑 element_2 = item - 5 # 示例逻辑 arr2_e1.append(element_1) arr2_e2.append(element_2) # 处理master_array_3 arr3_e1 = [] arr3_e2 = [] for item in master_array_3: element_1 = item / 2 # 示例逻辑 element_2 = item * 3 # 示例逻辑 arr3_e1.append(element_1) arr3_e2.append(element_2) # ---------------------- # 第二步:并行写入单个文件 # ---------------------- # 打开文件准备写入 with open('combined_output.csv', 'w', newline='', encoding='utf-8') as output_file: # 写入表头 header = 'master1_e1,master1_e2,master2_e1,master2_e2,master3_e1,master3_e2\n' output_file.write(header) # 使用zip_longest对齐不同长度的列表,fillvalue设为你需要的填充值(空字符串/NaN等) for e1_1, e1_2, e2_1, e2_2, e3_1, e3_2 in itertools.zip_longest( arr1_e1, arr1_e2, arr2_e1, arr2_e2, arr3_e1, arr3_e2, fillvalue='' ): # 拼接成行,用逗号分隔(可替换为制表符\t做TSV文件) line = f'{e1_1},{e1_2},{e2_1},{e2_2},{e3_1},{e3_2}\n' output_file.write(line)
关键说明
itertools.zip_longest会自动对齐所有列表,短列表的缺失位置用fillvalue指定的值填充(比如空字符串、'NaN'或数字0)- 全程只操作一个输出文件,无需事后合并多文件
- 表头可根据你的实际需求修改字段名
Pandas实现(适合数据分析场景)
如果你的工作流已经用到Pandas,这种方式更简洁,利用DataFrame的列合并功能自动补全缺失值。
代码示例
import pandas as pd # ---------------------- # 第一步:遍历数组生成对应元素列表(和原生方案一致) # ---------------------- arr1_e1 = [] arr1_e2 = [] for item in master_array_1: element_1 = item * 2 element_2 = item + 1 arr1_e1.append(element_1) arr1_e2.append(element_2) arr2_e1 = [] arr2_e2 = [] for item in master_array_2: element_1 = item ** 2 element_2 = item - 5 arr2_e1.append(element_1) arr2_e2.append(element_2) arr3_e1 = [] arr3_e2 = [] for item in master_array_3: element_1 = item / 2 element_2 = item * 3 arr3_e1.append(element_1) arr3_e2.append(element_2) # ---------------------- # 第二步:合并为DataFrame并写入文件 # ---------------------- # 将每个master的元素转为DataFrame df_master1 = pd.DataFrame({'master1_e1': arr1_e1, 'master1_e2': arr1_e2}) df_master2 = pd.DataFrame({'master2_e1': arr2_e1, 'master2_e2': arr2_e2}) df_master3 = pd.DataFrame({'master3_e1': arr3_e1, 'master3_e2': arr3_e2}) # 按列合并,outer join自动补全缺失值为NaN combined_df = pd.concat([df_master1, df_master2, df_master3], axis=1) # 写入CSV文件,index=False去除自动生成的行索引 combined_df.to_csv('combined_output.csv', index=False, encoding='utf-8')
关键说明
- Pandas会自动处理不同长度的DataFrame合并,短DataFrame的缺失行填充为
NaN - 输出格式更规范,适合后续数据分析处理
- 若需要其他填充值,可在合并后用
combined_df.fillna(你的填充值)修改
内容的提问来源于stack exchange,提问作者Radwan Parvez
相关产品推荐
相关产品推荐

