program story

파일이 아닌 문자열로 CSV 형식으로 데이터를 쓰려면 어떻게해야합니까?

inputbox 2020. 8. 30. 08:16
반응형

파일이 아닌 문자열로 CSV 형식으로 데이터를 쓰려면 어떻게해야합니까?


[1,2,'a','He said "what do you mean?"']CSV 형식의 문자열 과 같은 데이터를 캐스트하고 싶습니다 .

일반적으로 csv.writer()이를 위해 사용 합니다. 왜냐하면 모든 미친 엣지 케이스 (쉼표 이스케이프, 따옴표 이스케이프, CSV 방언 등) csv.writer()를 처리하기 때문입니다.

내 현재 솔루션은 다소 해키 한 기능입니다.

def CSV_String_Writeline(data):
    class Dummy_Writer:
        def write(self,instring):
            self.outstring = instring.strip("\r\n")
    dw = Dummy_Writer()
    csv_w = csv.writer( dw )
    csv_w.writerow(data)
    return dw.outstring

누구든지 엣지 케이스를 잘 처리하는 더 우아한 솔루션을 줄 수 있습니까?

편집 : 다음은 내가 한 방법입니다.

def csv2string(data):
    si = StringIO.StringIO()
    cw = csv.writer(si)
    cw.writerow(data)
    return si.getvalue().strip('\r\n')

StringIO자신의 대신 사용할 수 있습니다 Dummy_Writer.

이 모듈 StringIO은 문자열 버퍼 (메모리 파일이라고도 함)를 읽고 쓰는 파일 류 클래스를 구현합니다 .

cStringIO더 빠른 StringIO클래스 버전 인도 있습니다 .


Python 3 :

>>> import io
>>> import csv
>>> output = io.StringIO()
>>> csvdata = [1,2,'a','He said "what do you mean?"',"Whoa!\nNewlines!"]
>>> writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow(csvdata)
59
>>> output.getvalue()
'1,2,"a","He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'

Python 2의 경우 일부 세부 정보를 약간 변경해야합니다.

>>> output = io.BytesIO()
>>> writer = csv.writer(output)
>>> writer.writerow(csvdata)
57L
>>> output.getvalue()
'1,2,a,"He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'

나는 대답을 모두 약간 혼란스럽게 찾았습니다. Python 2의 경우이 사용법이 저에게 효과적이었습니다.

import csv, io

def csv2string(data):
    si = io.BytesIO()
    cw = csv.writer(si)
    cw.writerow(data)
    return si.getvalue().strip('\r\n')

data=[1,2,'a','He said "what do you mean?"']
print csv2string(data)

다음은 utf-8에서 작동하는 버전입니다. csvline2string (끝에 줄 바꿈 없음), 여러 줄에 대해 csv2string (줄 바꿈 포함) :

import csv, io

def csvline2string(one_line_of_data):
    si = BytesIO.StringIO()
    cw = csv.writer(si)
    cw.writerow(one_line_of_data)
    return si.getvalue().strip('\r\n')

def csv2string(data):
    si = BytesIO.StringIO()
    cw = csv.writer(si)
    for one_line_of_data in data:
        cw.writerow(one_line_of_data)
    return si.getvalue()

import csv
from StringIO import StringIO
with open('file.csv') as file:
    file = file.read()

stream = StringIO(file)

csv_file = csv.DictReader(stream)

예제에는 데이터 행이 하나만 있으므로 간단히 사용할 수 있습니다.

input = [1,2,'a','He said "what do you mean?"']
output = ",".join(str(x) for x in input)

입력 데이터가 사전이나 2D 배열과 같이 더 복잡한 형태를 가지고 있다면이 간단한 대답은 더 복잡해질 것입니다.

참고 URL : https://stackoverflow.com/questions/9157314/how-do-i-write-data-into-csv-format-as-string-not-file

반응형