데이터를 파일이 아닌 문자열로 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')
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'
당신은 당신의 것 대신에 사용할 수 있습니다.Dummy_Writer
:
이 모듈은 파일과 같은 클래스를 구현합니다.
StringIO
문자열 버퍼(메모리 파일이라고도 함)를 읽고 씁니다.
또한 가 있습니다. 이것은 더 빠른 버전입니다.StringIO
학급.
저는 이것을 사용하여 sanic에서 csv 데이터로 사용자에게 비동기식으로 결과를 스트리밍하기 때문에 Python 3을 위해 다음 스니펫을 작성했습니다.
이 스니펫을 사용하면 동일한 StringIo 버퍼를 반복적으로 재사용할 수 있습니다.
import csv
from io import StringIO
class ArgsToCsv:
def __init__(self, seperator=","):
self.seperator = seperator
self.buffer = StringIO()
self.writer = csv.writer(self.buffer)
def stringify(self, *args):
self.writer.writerow(args)
value = self.buffer.getvalue().strip("\r\n")
self.buffer.seek(0)
self.buffer.truncate(0)
return value + "\n"
예:
csv_formatter = ArgsToCsv()
output += csv_formatter.stringify(
10,
"""
lol i have some pretty
"freaky"
strings right here \' yo!
""",
[10, 20, 30],
)
githubstic: 소스 및 테스트에서 추가 사용 방법을 확인하십시오.
저는 답이 전반적으로 약간 혼란스럽다는 것을 알았습니다.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. csvline2 문자열을 한 줄로 구분하지 않고 끝에 줄 바꿈 없이, csv2 문자열을 여러 줄로 구분하여 사용할 수 있는 버전입니다.
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)
언급URL : https://stackoverflow.com/questions/9157314/how-do-i-write-data-into-csv-format-as-string-not-file
'programing' 카테고리의 다른 글
스프링 부트 자동 배선이 구성 클래스에서 작동하지 않음 (0) | 2023.06.26 |
---|---|
SQL Server 2005 제약 조건이 있는 드롭 열 (0) | 2023.06.26 |
이 컨텍스트에서는 숫자 또는 부울을 반환하는 변수 식만 허용됩니다. (0) | 2023.06.26 |
수출 신고형 Xyz'는 '수출 신고형 Xyz'에 비해 무엇을 의미합니까? (0) | 2023.06.26 |
R.exe, Rcmd.exe, Rscript.exe와 Rterm.exe: 차이점은 무엇입니까? (0) | 2023.06.26 |