【发布时间】:2018-09-16 20:24:41
【问题描述】:
我从 1 天开始就遇到了一个奇怪的问题。我有一个 CSV 文件,我需要将其导入到我的配置单元表中。但是,CSV 文件在字符串之间嵌入了换行符。由于文件很大,我无法使用文本编辑器替换 '\n' 字符。
我编写了一个 python 程序来帮助我清理文件。 我从 CSV 文件中读取每一行,如果遇到任何换行符,我将其替换为空格。下面是我的程序。
# -*- coding: utf-8 -*-
import csv
import sys
file = open("team_contacts_cleaned.csv","w")
with open('team_contacts.csv') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
stripped = [col.replace('\n', '') for col in row]
file.write(','.join(stripped))
file.write('\n')
file.close()
print 'Done'
一旦我有了这个清理过的文件,我就会看到行数符合预期。 当我在我知道打破记录的字符串上 grep 文件时,确切的行会打印在控制台中,但是,我在输出中看不到该行。
例如。
原始文件
cat team_contacts.csv | grep -A4 'Yennai Nambi'
,,,,,11/30/2017 11:45 AM UTC,,,,12/29/2017 11:51 AM UTC,,"Yennai Nambi Vandhavarai Yaemaatra Maattaen ;
Verum Yaeniyaay Naanirundhu Yaemaatra Maattaen ;
Naan Uyir Vaazhndhaal Ingaedhaan ;
Ooadivida Maattaen .",0,
清理文件
cat team_contacts_cleaned.csv | grep 'Naan Uyir Vaazhndhaal Ingaedhaan'
,,,,,11/30/2017 11:45 AM UTC,,,,12/29/2017 11:51 AM UTC,,Yennai Nambi Vandhavarai Yaemaatra MaOoadivida Maattaen .,0,
当我 cat 文件时,数据似乎被删除了,但是 grep 能够准确定位字符串,这意味着字符串仍然存在,但为什么没有显示出来?
现在,当我将这个清理过的文件移动到配置单元时,它再次中断,数据显示如下
Verum Yaeniyaay Naanirundhu Yaemaatra Maattaen ; NULL NULL NULL NULL NULL NULLNULL
Naan Uyir Vaazhndhaal Ingaedhaan ; NULL NULL NULL NULL NULL NULL NULL NULLNULL
我在这里错过了什么?
我什至在编写 python 代码之前尝试了一个 gawk 程序,但我遇到了同样的问题。
gawk -v RS='"' 'NR % 2 == 0 { gsub(/\n/, "") } { printf("%s%s", $0, RT) }' team_contacts.csv > team.csv
【问题讨论】:
-
这可能不是您的问题,但是……您使用
csv读取输入 CSV 而不使用csv写入输出 CSV 是否有原因? -
同时,我很难理解您所描述的问题。如果您给我们一个minimal reproducible example,这将非常有帮助——带有示例输入、预期输出和实际输出——这样我们就可以自己重现并调试它。 (点击上面的链接到帮助页面;它有很多有用的信息。)
-
Python 无需将换行符更改为空格,只需执行
tr '\n' ' ' < team_contacts.csv > team_contacts_cleaned.csv。
标签: python shell csv hive grep