【问题标题】:python3: csv.writer how to remove end of line ^M?python3:csv.writer 如何删除行尾^M?
【发布时间】:2020-04-10 23:49:10
【问题描述】:

我意识到我的 export.csv 文件的每一行都以 ^M 结尾, 知道如何删除它吗? 可能我必须以某种方式修改 csv.writer 当我将此 csv 文件导入 SQL 时,我在行的末尾多了一个 NULL 列。 :(

我使用以下代码将 csv 读取到数组中:

datafile = open('source.csv', 'r')
datareader = csv.reader(datafile, delimiter=',')
...

然后使用此代码写入另一个 csv 文件

with open('export.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerows(data2)

【问题讨论】:

    标签: python-3.x export-to-csv


    【解决方案1】:

    您应该改为使用newline='' 打开源文件,以便保留原始换行符结尾以供csv.reader 正确处理换行符:

    datafile = open('source.csv', 'r', newline='')
    

    摘自documentation

    如果未指定newline='',则在引用字段中嵌入换行符 将无法正确解释,并且在使用 \r\n 的平台上 将添加额外的\r。它应该永远是 安全地指定newline='',因为csv 模块自己做 (通用)换行符处理。

    【讨论】:

    • 我添加了 newline='' 但最后仍然有 ^M。仅供参考:为了创建新对象数据2,我使用位于 btw read and write csv> data2 = copy.deepcopy(data) 的代码
    【解决方案2】:
    with open('export.csv', 'w', newline='') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',',
                                quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
        spamwriter.writerows(data2)
    

    在 csv.writer() 方法中添加lineterminator='\n' 作为参数,以指定换行符。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 2018-04-08
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2010-09-21
      相关资源
      最近更新 更多