【问题标题】:How write csv file without new line character in last line?如何在最后一行写入没有换行符的csv文件?
【发布时间】:2013-10-19 01:02:41
【问题描述】:

我有这样的代码在 python 中编写 csv 文件

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

输出如图所示。 现在输出 (第 3 行) 中多了一行。如何在编写 csv 文件时删除最后一个空行。

【问题讨论】:

  • 方法 writerow 将在每行写入的末尾附加一个换行符。您需要使用不同的方法。

标签: python csv python-2.7


【解决方案1】:

使用file.seek 将文件指针移动到最后一个\r\n 之前,然后使用file.truncate。

import os
import csv

with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
    csvfile.seek(-2, os.SEEK_END) # <---- 2 : len('\r\n')
    csvfile.truncate()            # <----

注意:如果您使用不同的lineterminator,则应更改-2。我使用了-2,因为\r\n 是默认的换行符。

【讨论】:

  • 2021,你拯救了我的一天。我不知道 open 中的 newline='' 是否适用于 Python3,但这在 python 2.7 中有效。
【解决方案2】:

这是一个使用 rstrip 从 csv 的最后一行删除换行符的解决方案:

def remove_last_line_from_csv(filename):
    with open(filename) as myFile:
        lines = myFile.readlines()
        last_line = lines[len(lines)-1]
        lines[len(lines)-1] = last_line.rstrip()
    with open(filename, 'w') as myFile:    
        myFile.writelines(lines)

【讨论】:

    【解决方案3】:
    with open('eggs.csv', 'wb',newline='') as csvfile:
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    • 简单问题简单回答——程序员就是这样工作的。
    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 2023-03-07
    • 2021-03-22
    • 2018-11-05
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多