【问题标题】:Writing mixed data rows in a csv file在 csv 文件中写入混合数据行
【发布时间】:2020-05-18 16:21:15
【问题描述】:

我想在 .csv 文件中写入行以及每行同时包含数值和字符串的标题。以下是标题:

这里只有“文件名”和“类”是字符串类型的。其余列是数字。标题应该只写一次,并且要逐一追加行。行与行之间不应有空白换行符。

所以我做了以下事情:

  • 一开始我分别写了标题:

    fields = ["filename", "width", "height", "class", "xmin", "ymin", "xmax", "ymax"]
    
    with open(csv_file_dir, 'w') as csvfile:  
        # creating a csv writer object  
        csvwriter = csv.writer(csvfile)  
        # writing the fields  
        csvwriter.writerow(fields)
    csvfile.close()
    
  • 因此在一个循环内(我正在生成每个数据行)我使用类似的代码来附加每一行这样(我使用类型转换将整数转换为字符串,否则它会产生错误,例如:“...预期可迭代,而不是 int”):

    rows = [str(img_SN), str(w), str(h), "eye", str(relt[0]), str(relt[1]), str(rerb[0]), str(rerb[1])] # data row
    # writing to csv file  
    with open(csv_file_dir, 'a') as csvfile:  
        # creating a csv writer object  
        csvwriter = csv.writer(csvfile, delimiter = ',')  
        # writing the data rows  
        csvwriter.writerows(rows)
    csvfile.close()
    

但它给出了完全不受欢迎的输出。例如,对于示例数据行,输出如下:

['0.jpg', '464', '350', '眼睛', '107', '119', '133', '145']

文件中写入的内容如下:

也就是说,每个字符都受到攻击,而且它会自动换行。

但是想要的输出是这样的:

考虑两个样本行:

['0.jpg', '464', '350', '眼睛', '107', '119', '133', '145']

['1.jpg', '768', '576', '眼睛', '131', '176', '257', '302']

我需要这样的输出:

如何做到这一点?

【问题讨论】:

    标签: python file csv


    【解决方案1】:

    如果您想一次只写一行,请使用 writerow 而不是 writerows

    【讨论】:

    • 是的,有效!谢谢。还使用 open(csv_file_dir, 'a', newline = '') 来防止自动换行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多