You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python向已有CSV文件添加符合条件的行?

问题描述

file1.csv
file2.csv

各位好,如您所见,我已创建两个CSV文件,二者的前6行内容完全一致。我现在想要在每个文件中再添加两行,要求这两行的前8列在两个文件中保持一致(和前6行一样),但最后两列包含不同的随机字符串和浮点数。

原代码

import random
import csv

# Generate 10 rows of random data
data = []
for i in range(10):
    row = {}
    for j in range(2):
        row[f"key{j+1}"] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
    for j in range(8):
        row[f"val{j+1}"] = round(random.uniform(-1000, 1000), 2)
    data.append(row)

# Write the data to two separate CSV files
header = ["key1", "key2"] + ["val" + str(j+1) for j in range(8)]
with open("file1.csv", "w", newline="") as file1, open("file2.csv", "w", newline="") as file2:
    writer1 = csv.DictWriter(file1, fieldnames=header)
    writer2 = csv.DictWriter(file2, fieldnames=header)
    writer1.writeheader()
    writer2.writeheader()
    for i in range(10):
        if i < 6:
            writer1.writerow(data[i])
            writer2.writerow(data[i])
        else:
            writer1.writerow(data[i])
            writer2.writerow(data[i - 6])

解决方案

原代码的问题在于后续行直接复用了之前生成的数据,导致file2的后半部分是前半部分的重复,无法满足需求。以下是针对两种常见列定义场景的修正代码:

场景1:前8列为val1-val8(浮点数),最后两列为key1-key2(随机字符串)

新增两行的8个数值列在两个文件中完全相同,仅字符串列各自随机生成:

import random
import csv

# 生成前6行完整数据(所有列完全一致)
header = ["key1", "key2"] + [f"val{j+1}" for j in range(8)]
rows_common = []
for _ in range(6):
    row = {
        "key1": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20)),
        "key2": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
    }
    for j in range(8):
        row[f"val{j+1}"] = round(random.uniform(-1000, 1000), 2)
    rows_common.append(row)

# 生成新增2行的公共数值列(val1-val8)
additional_common_cols = []
for _ in range(2):
    common_part = {}
    for j in range(8):
        common_part[f"val{j+1}"] = round(random.uniform(-1000, 1000), 2)
    additional_common_cols.append(common_part)

# 写入两个CSV文件
with open("file1.csv", "w", newline="") as file1, open("file2.csv", "w", newline="") as file2:
    writer1 = csv.DictWriter(file1, fieldnames=header)
    writer2 = csv.DictWriter(file2, fieldnames=header)
    
    # 写入表头和前6行
    writer1.writeheader()
    writer2.writeheader()
    for row in rows_common:
        writer1.writerow(row)
        writer2.writerow(row)
    
    # 写入新增的2行:公共列保持一致,字符串列分别随机生成
    for common_part in additional_common_cols:
        # 为file1生成随机字符串列
        row1 = common_part.copy()
        row1["key1"] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
        row1["key2"] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
        writer1.writerow(row1)
        
        # 为file2生成全新的随机字符串列
        row2 = common_part.copy()
        row2["key1"] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
        row2["key2"] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
        writer2.writerow(row2)

场景2:前8列为key1-key2+val1-val6,最后两列为val7-val8(随机浮点数)

新增两行的字符串列和前6个数值列保持一致,仅最后两个数值列各自随机生成:

import random
import csv

header = ["key1", "key2"] + [f"val{j+1}" for j in range(8)]
rows_common = []
for _ in range(6):
    row = {
        "key1": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20)),
        "key2": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
    }
    for j in range(8):
        row[f"val{j+1}"] = round(random.uniform(-1000, 1000), 2)
    rows_common.append(row)

# 生成新增2行的公共前8列(key1-key2 + val1-val6)
additional_common_cols = []
for _ in range(2):
    common_part = {
        "key1": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20)),
        "key2": ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=20))
    }
    for j in range(6):
        common_part[f"val{j+1}"] = round(random.uniform(-1000, 1000), 2)
    additional_common_cols.append(common_part)

# 写入两个CSV文件
with open("file1.csv", "w", newline="") as file1, open("file2.csv", "w", newline="") as file2:
    writer1 = csv.DictWriter(file1, fieldnames=header)
    writer2 = csv.DictWriter(file2, fieldnames=header)
    
    writer1.writeheader()
    writer2.writeheader()
    for row in rows_common:
        writer1.writerow(row)
        writer2.writerow(row)
    
    # 写入新增的2行:公共列保持一致,最后两个数值列分别随机生成
    for common_part in additional_common_cols:
        # 为file1生成最后两个数值列
        row1 = common_part.copy()
        row1["val7"] = round(random.uniform(-1000, 1000), 2)
        row1["val8"] = round(random.uniform(-1000, 1000), 2)
        writer1.writerow(row1)
        
        # 为file2生成全新的最后两个数值列
        row2 = common_part.copy()
        row2["val7"] = round(random.uniform(-1000, 1000), 2)
        row2["val8"] = round(random.uniform(-1000, 1000), 2)
        writer2.writerow(row2)

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45