【问题标题】:How to create two csv files based on the following requirements?如何根据以下要求创建两个 csv 文件?
【发布时间】:2023-02-23 03:17:57
【问题描述】:

我正在尝试使用 Python 创建两个满足以下条件的 csv 文件:

  1. 文件 1 名称:test1,文件 2 名称:test2
  2. 文件1和文件2都有10行;
  3. 文件 1 和文件 2 都有名为“key1”和“key2”的 2 列,包含长度为 20 的随机字符串。
  4. 文件 1 和文件 2 都有 8 列,名为“val1”,...,“val8”,包含 -1000 到 +1000 之间的随机浮点数;
  5. 对于这两个文件,从第1行到第6行,test1和test2中对应的行具有相同的键和值;
  6. 对于这两个文件,从第 7 行到第 8 行,只有最后一列在 test1 和 test2 中具有不同的浮点数。其余列具有完全相同的键和值。
  7. 对于这两个文件,从第 9 行到第 10 行,test1 和 test2 中对应的行具有相同的键和值。

    这是我的代码:

    import csv
    import random
    import string
    
    NUM_ROWS = 10
    NUM_COLS = 10
    KEY_COLS = ["key1", "key2"]
    VAL_COLS = ["val"+str(i+1) for i in range(8)]
    FLOAT_RANGE = (-1000, 1000)
    STRING_LENGTH = 20
    
    
    def random_string(length):
        return ''.join(random.choice(string.ascii_letters) for _ in range(length))
    
    with open('test1.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
    
    header_row = KEY_COLS + VAL_COLS
    writer.writerow(header_row)
    
    for i in range(6):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
    writer.writerow(key_values + val_values)
    
    
    for i in range(2):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS)-1)] + [random.uniform(*FLOAT_RANGE)]
    writer.writerow(key_values + val_values)
    
    for i in range(2):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
    writer.writerow(key_values + val_values)
    
    
    with open('test2.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
    
    writer.writerow(KEY_COLS + VAL_COLS)
    
    for i in range(6):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
    writer.writerow(key_values + val_values)
    
    for i in range(2):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS)-1)] + [random.uniform(*FLOAT_RANGE)]
    writer.writerow(key_values + val_values)
    
    for i in range(2):
        key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
    val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
    writer.writerow(key_values + val_values)
    
    
    print("Files created with", NUM_ROWS, "rows and", NUM_COLS, "columns each.")
    print("Key columns:", KEY_COLS)
    print("Value columns:", VAL_COLS)
    print("Floating numbers range:", FLOAT_RANGE)
    print("String length:", STRING_LENGTH) `
    

    但它未能创建任何 csv 文件,我不确定为什么。任何帮助表示赞赏!

    我希望根据上述条件/要求创建 2 个 csv 文件。

【问题讨论】:

    标签: python csv


    【解决方案1】:
    import csv
    import random
    import string
    
    NUM_ROWS = 10
    NUM_COLS = 10
    KEY_COLS = ["key1", "key2"]
    VAL_COLS = ["val"+str(i+1) for i in range(8)]
    FLOAT_RANGE = (-1000, 1000)
    STRING_LENGTH = 20
    
    
    def random_string(length):
        return ''.join(random.choice(string.ascii_letters) for _ in range(length))
    
    with open('test1.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
    
        header_row = KEY_COLS + VAL_COLS
        writer.writerow(header_row)
    
        for i in range(6):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
            writer.writerow(key_values + val_values)
    
    
        for i in range(2):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS)-1)] + [random.uniform(*FLOAT_RANGE)]
            writer.writerow(key_values + val_values)
            
        for i in range(2):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
            writer.writerow(key_values + val_values)
    
    
    with open('test2.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
    
        writer.writerow(KEY_COLS + VAL_COLS)
    
        for i in range(6):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
            writer.writerow(key_values + val_values)
    
        for i in range(2):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS)-1)] + [random.uniform(*FLOAT_RANGE)]
            writer.writerow(key_values + val_values)
    
        for i in range(2):
            key_values = [random_string(STRING_LENGTH) for _ in range(len(KEY_COLS))]
            val_values = [random.uniform(*FLOAT_RANGE) for _ in range(len(VAL_COLS))]
            writer.writerow(key_values + val_values)
    
    
    print("Files created with", NUM_ROWS, "rows and", NUM_COLS, "columns each.")
    print("Key columns:", KEY_COLS)
    print("Value columns:", VAL_COLS)
    print("Floating numbers range:", FLOAT_RANGE)
    print("String length:", STRING_LENGTH)
    

    刚刚修复了一些缩进。现在应该可以工作并成功创建 csv 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2020-02-18
      • 2016-01-12
      相关资源
      最近更新 更多