【问题标题】:Unwanted newlines for a file.write CSV when entries are overfull/too long当条目过满/太长时,file.write CSV 中不需要的换行符
【发布时间】:2020-06-16 16:17:39
【问题描述】:

我正在尝试使用 python file.write 编写一个 CSV 文件,但一些索引条目太长以至于它们在 CSV 文件中创建新行。我正在使用.format() 方法在循环中用它们各自的输入填充我的列。理想情况下,我希望 CSV 接受长条目并只更改列宽而不是将它们撞到新行。

with tf.Session(config=sess_config) as sess:
        ...

        fclog = open(os.path.join(log_dir, args.fpred + '.csv'), 'w')   # Initialize csv with col headers
        fclog.write("fname,itp,tp_prob,its,ts_prob\n")

        for i in range(len(fname_batch)):
               fclog.write(
               "{},{},{},{},{}\n".format(fname_batch[i].decode(), picks_batch[i][0][0], picks_batch[i][0][1],
                                                picks_batch[i][1][0], picks_batch[i][1][1]))
        ...
        fclog.close()

上图是生成的 csv 文件中的行示例。请注意,第一行条目并没有过满并且按预期工作。然而,第二行条目在tp_prob 列中包含一个过满的条目,并将其余条目颠倒到新行。第三行条目再次按预期工作。

谢谢!

【问题讨论】:

    标签: python python-3.x csv format newline


    【解决方案1】:

    我发现由于某种原因,当数据太长而不是仅在行尾时,在实际行字符串中添加了换行符 \n。为了解决这个问题,我使用.replace 函数替换了行字符串中的换行符,然后在行尾添加了一个换行符。

    with tf.Session(config=sess_config) as sess:
            ...
    
            fclog = open(os.path.join(log_dir, args.fpred + '.csv'), 'w')   # Initialize csv with col headers
            fclog.write("fname,itp,tp_prob,its,ts_prob\n")
    
            for i in range(len(fname_batch)):
                   my_str = "{},{},{},{},{}".format(fname_batch[i].decode(), picks_batch[i][0][0],
                                                    picks_batch[i][0][1],
                                                    picks_batch[i][1][0],
                                                    picks_batch[i][1][1]).replace("\n", "")
                   fclog.write(my_str + "\n")
            ...
            fclog.close()
    

    我确信有一种更简洁的方法可以做到这一点,因此我欢迎更多解决方案。我还是不明白为什么会自动插入这些换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2017-10-25
      • 1970-01-01
      • 2011-10-10
      • 2018-01-28
      • 1970-01-01
      相关资源
      最近更新 更多