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

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

我从一天起就被一个奇怪的问题困住了。我有一个csv文件,我需要导入到我的配置单元表。但是,csv文件在字符串之间嵌入了换行符。由于文件很大,我无法使用文本编辑器替换'\n'字符。
我写了一个python程序来帮助我清理文件。我从csv文件中读取每一行,如果遇到任何换行符,我会用空格替换它。下面是我的程序。

  1. # -*- coding: utf-8 -*-
  2. import csv
  3. import sys
  4. file = open("team_contacts_cleaned.csv","w")
  5. with open('team_contacts.csv') as csvfile:
  6. reader = csv.reader(csvfile)
  7. for row in reader:
  8. stripped = [col.replace('\n', '') for col in row]
  9. file.write(','.join(stripped))
  10. file.write('\n')
  11. file.close()
  12. print 'Done'

一旦我有了这个清理文件,我看到行计数匹配预期。当我在字符串上grep文件时,我知道这是打破记录的,确切的一行被打印在控制台中,但是,我在输出中没有看到那一行。
如。
原始文件

  1. cat team_contacts.csv | grep -A4 'Yennai Nambi'
  2. ,,,,,11/30/2017 11:45 AM UTC,,,,12/29/2017 11:51 AM UTC,,"Yennai Nambi Vandhavarai Yaemaatra Maattaen ;
  3. Verum Yaeniyaay Naanirundhu Yaemaatra Maattaen ;
  4. Naan Uyir Vaazhndhaal Ingaedhaan ;
  5. Ooadivida Maattaen .",0,

已清理文件

  1. cat team_contacts_cleaned.csv | grep 'Naan Uyir Vaazhndhaal Ingaedhaan'
  2. ,,,,,11/30/2017 11:45 AM UTC,,,,12/29/2017 11:51 AM UTC,,Yennai Nambi Vandhavarai Yaemaatra MaOoadivida Maattaen .,0,

它看起来像数据被删除时,我猫的文件,但grep能够准确地定位字符串,这意味着字符串仍然存在,但为什么它没有出现?
现在,当我把这个清理过的文件移到配置单元时,它再次中断,数据显示如下

  1. Verum Yaeniyaay Naanirundhu Yaemaatra Maattaen ; NULL NULL NULL NULL NULL NULLNULL
  2. Naan Uyir Vaazhndhaal Ingaedhaan ; NULL NULL NULL NULL NULL NULL NULL NULLNULL

我错过了什么?
在编写python代码之前,我甚至尝试过一个gawk程序,我也遇到了同样的问题。

  1. 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
这个可以关闭。更新了代码

  1. import csv
  2. import sys
  3. csv.field_size_limit(sys.maxsize)
  4. file = open("team_contacts_cleaned.csv","w")
  5. with open('team_contacts.csv','rU') as csvfile:
  6. reader = csv.reader(csvfile)
  7. writer = csv.writer(file,quoting=csv.QUOTE_ALL)
  8. for row in reader:
  9. stripped = [col.replace('\n', ' ') for col in row]
  10. writer.writerow(stripped)
  11. file.close()
  12. print 'Done'

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

展开查看全部

相关问题