【问题标题】:^M charcter in vi editorvi 编辑器中的 ^M 字符
【发布时间】:2020-08-30 21:28:01
【问题描述】:

我是 python 新手。我正在尝试附加 CSV 文件。

代码正在运行。但是当我执行 vi test2.csv 时,我会在行尾看到一个 ^M 字符。

当我在 Unix 框中执行 catless 时,我看不到该字符。甚至 CSV 看起来也不错。

您能否告知可能是什么问题。

with open('test.csv','r') as csvfile:
   csv_reader = csv.reader(csvfile)
   next(csv_reader)
   with open('test2.csv','a') as newfile:
      csv_writer = csv.writer(newfile)
      for line in csv_reader:
          csv_writer.writerow(line)

【问题讨论】:

  • 您的代码没有问题。检查此以获取有关此案例的更多详细信息unix.stackexchange.com/a/32003
  • 问题有详细解答here
  • 我们可以为此在 python 脚本中做点什么吗?

标签: python csv append


【解决方案1】:

按标准,CSV 文件以 (CR/LF) 作为文件结尾:

https://en.wikipedia.org/wiki/Comma-separated_values

以 (CR/LF) 字符结尾的 MS-DOS 样式的行(对于 最后一行)。

但是,您可以省略 CR,并且大多数读者可以正常阅读此类文件。

vi 是 Linux 中的纯测试编辑器,对于文本文件,它只需要 LF 并显示那些 CR。

Hamza Abdaoui 提供了很好的参考 https://unix.stackexchange.com/questions/32001/what-is-m-and-how-do-i-get-rid-of-it/32003#32003

任何专用的 CSV 阅读器都能正确处理 (CR/LF)。 例如,python csv 模块就是这样做的。 因此,当您使用 csv.reader 阅读时,您会放弃 CR。 但是,当您使用 csv.writer 保存它时,它会强制 (CR/LF) 进入输出文件。

您可以使用 lineterminator 更改此类行为

csv_writer = csv.writer(newfile, lineterminator='\n')

【讨论】:

  • 非常感谢。
猜你喜欢
  • 2012-11-11
  • 2010-10-31
  • 2015-11-07
  • 2010-12-18
  • 1970-01-01
  • 2010-12-09
  • 2012-12-14
  • 2013-06-04
  • 2013-09-16
相关资源
最近更新 更多