2009-11-27 5 views
0

DB (전체 레코드)에서 데이터를 읽고 각 필드가 ';'로 구분되는 행 하나의 레코드에 씁니다. 내가 직면하고있는 문제는 일부 필드에 CRLF가 포함되어 있고 파일에 쓸 때 파일의 구조를 파괴하는 다음 줄로 이동한다는 것입니다.CSV 내보내기 데이터에서 CRLF를 방지합니다.

유일한 해결책은 CRLF를 사용자 지정 값으로 바꾸는 것이며, 가져올 때 CRLF로 다시 바꾸는 것입니다. 하지만이 파일은 거대하고 교체 작업으로 인해 성능이 저하되기 때문에이 솔루션이 마음에 들지 않습니다 ....

다른 아이디어가 있습니까?

감사합니다.

답변

1

예. 문자열 값을 인용 부호로 묶은 CSV 생성기를 사용하십시오. 예를 들어, Python의 csv 모듈입니다. 예를 들어

(리핑과 csvdocs에서 수정) :

import csv 
def write(filename): 
    spamWriter = csv.writer(open(filename, 'w'), quoting=csv.QUOTE_ALL) 
    spamWriter.writerow(['Spam'] * 5 + ['Baked Beans']) 
    spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam\nbar']) 

def read(filename): 
    reader = csv.reader(open(filename, "rb")) 
    for row in reader: 
     print row 

write('eggs.csv') 
read('eggs.csv') 

출력 : 파일을 내보내고 가져 오는 방법을 제어 할 수있는 경우

['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans'] 
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar'] 
+0

좋은 아이디어 ... 감사합니다! – GeoXYZ

0

, 다음에 할 수 있습니다를 XML을 사용하는 것을 고려해보십시오. 또한 값에서 ","과 같은 리터럴을 나타내는 것으로 생각하는 큰 따옴표를 사용할 수 있습니다.

관련 문제