Grep发现字符串虽然字符串在文件中不可见

2024-10-01 11:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件csv字符串程序amnullgrepteam
1条回答
网友
1楼 · 发布于 2024-10-01 11:33:31

我解决了这个问题。当我把文件分成几部分时,我犯了这个错误

_csv.Error: new-line character seen in unquoted field

下面的链接帮助我解决了这个问题。 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您的解决方案将无法工作,因为它将删除所有新行。你知道吗

相关问题 更多 >