2017-03-08 2 views
0

줄이있는 csv 파일이 있는데, 각 줄은 (@)로 시작하고 줄 내의 모든 필드는 (;)로 구분됩니다. "텍스트"(""[] "")가 포함 된 필드 중 하나에는 전체 csv 파일을 가져 오는 동안 오류가 발생하여 Excel에서 액세스하거나 액세스 할 수있는 줄 바꿈이 있습니다. 줄 바꿈 이후의 텍스트는 테이블의 구조를 따르지 않고 독립된 줄로 간주됩니다.csv 파일에서 줄 바꿈을 제거합니다.

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! 
la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. 
+info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

파이썬 스크립트를 사용하는 경우 어떤 도움이 필요합니까?

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. +info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

도움 : 또는 다른 해결책은 ... 출력으로

나는 라인을 가지고 싶다? 나는 줄 바꿈이있는 줄이 많은 csv 파일 (54MB) ... 일부 다른 줄은 ok입니다 ...

+0

또한 댓글 내부는 고려하지 않아도됩니까? –

+0

모든 줄을 예제의 두 번째 줄로 구성하고 싶습니다. (@ 624914422 ...) – luisec

+1

시도해 보셨습니까? 꽤 간단한 방법으로 시작하는 것처럼 보입니다. 그것을 한 줄씩 읽고'@'를 버리고'; '로 나눠 쓰거나 그렇지 않으면 csv 모듈을 사용하십시오. –

답변

0

예상되는 출력도 공유해야합니다.

어쨌든 파일을 정리하여 개행 문자를 제거하는 것이 좋습니다. 그러면 csv로 읽을 수 있습니다. 하나 개의 솔루션은 (리눅스에서)

청소 파일 (누군가가 뭔가 더 나은 :-)을 제안 할 것으로 예상) 될 수 있습니다 CSV

sed ':a;N;$!ba;s/\n/ /g' input_file | sed "s/ @/\[email protected]/g" > output_file 

읽기 파일을 (당신은 어떤을 사용하여 읽을 수 있습니다 다른 방법)

import pandas as pd 
df = pd.read_csv('output_file', delimiter=';', header=None) 
df.to_csv('your_csv_file_name', index=False) 

당신이 리터를 검색 할 수 있습니다

+0

Thanks @PaulRooney – Pintu

+0

Windows 작업 – luisec

0

:-) 당신을 도움이되는지 보자 ines 다음에 "@"로 시작하지 않는 행이옵니다 (예 : \r?\n+([email protected]\d+;)).

다음은이 regex101 demo에서 생성되었습니다. 이 행 끝은 공백으로 대체됩니다. 원하는대로 변경할 수 있습니다.

# coding=utf8 
# the above tag defines encoding for this document and is for Python 2.x compatibility 

import re 

regex = r"\r?\n+([email protected]\d+;)" 

test_str = ("@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; \"\"[OJO!\n" 
    "la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras.\n" 
    "+info: co/plHcfSIfn8]\"\"; 0\n" 
    "@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; \"\"[Porque nunca dejamos de amar]\"\"; 0") 

subst = " " 

# You can manually specify the number of replacements by changing the 4th argument 
result = re.sub(regex, subst, test_str, 0, re.MULTILINE) 

if result: 
    print (result) 

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution. 
+0

코드를 만들 때 데모가 실제 텍스트 줄에 일부 문자를 추가하는 경우 ... – luisec

+0

@luisec 그게 무슨 뜻인지 이해가 안 되니? 단지''subst = ""'로 인해 공간을 추가한다는 의미 일 경우, 그 것을 ""로 바꿀 수 있습니다. 아니면 무엇이든 바꿀 수 있습니다. –

+0

"OJO!" 데모는 예제와 함께 코드를 내보낼 때 "\ n"을 추가합니다 (데모에서 이미 시도했습니다) ... 원래 줄에는 줄 바꿈 위치를 식별하는 문자가 없습니다 ... – luisec