grep查找字符串,尽管该字符串在文件中不可见

ny6fqffe  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(534)

我从一天起就被一个奇怪的问题困住了。我有一个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,

它看起来像数据被删除时,我猫的文件,但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
3hvapo4f

3hvapo4f1#

我解决了这个问题。当我把文件分成几部分时,我犯了这个错误
_csv.error:未加引号的字段中出现新行字符
下面的链接帮助我解决了这个问题。https://stackoverflow.com/a/32827068/3538426
这个可以关闭。更新了代码

import csv
import sys

csv.field_size_limit(sys.maxsize)

file = open("team_contacts_cleaned.csv","w")
with open('team_contacts.csv','rU') as csvfile:
    reader = csv.reader(csvfile)
    writer = csv.writer(file,quoting=csv.QUOTE_ALL)
    for row in reader:
        stripped = [col.replace('\n', ' ') for col in row]
        writer.writerow(stripped)
file.close()
print 'Done'

@agc您的解决方案将无法工作,因为它将删除所有新行。

相关问题