Linux中利用csvquote处理csv文件

问题

在linux中处理csv文件时,经常会碰到字段中包含,\n的问题,这种情况下就不能使用awkcut等命令处理文件

解决方案

使用csvquote对csv进行预处理。GitHub

csvquote可将csv字段中的,转换为US (unit separator,单元分隔符,ascii码31),将\n转换为RS (record separator,记录分隔符,ascii码30),这样在使用cut等命令时就能将它们当作普通字符处理了。

注意事项

在使用python处理转换后的文件时,要注意open方法打开文件是默认的newline参数值为None,python官方文档对该参数的解释:


newline 控制 universal newlines 模式如何生效(它仅适用于文本模式)。它可以是 None,’’,’\n’,’\r’ 和 ‘\r\n’。它的工作原理:

  • 从流中读取输入时,如果 newline 为 None,则启用通用换行模式。输入中的行可以以 ‘\n’,’\r’ 或 ‘\r\n’ 结尾,这些行被翻译成 ‘\n’ 在返回呼叫者之前。如果它是 ‘’,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
  • 将输出写入流时,如果 newline 为 None,则写入的任何 ‘\n’ 字符都将转换为系统默认行分隔符 os.linesep。如果 newline 是 ‘’ 或 ‘\n’,则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 ‘\n’ 字符将被转换为给定的字符串。

虽然python文档中只提到了 ‘\n’,’\r’ 或 ‘\r\n’ ,但其实RS字符也会被当作换行符

>>> '1\x1e2\n3\r4\r\n5\n\r6'.splitlines()
['1', '2', '3', '4', '5', '', '6']

所以在处理时需要显式地指定newline参数为文件的原始换行符,如Linux中的\n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值