[python] Python 목록의 값으로 .csv 파일 만들기

Python 목록의 값으로 .csv 파일을 만들려고합니다. 목록의 값을 인쇄하면 모두 유니 코드 (?)입니다. 즉, 다음과 같이 보입니다.

[u'value 1', u'value 2', ...]

내가 목록의 값을 반복하면 for v in mylist: print v 일반 텍스트처럼 보입니다.

그리고 나는 넣을 수 있습니다 , 서로 사이에print ','.join(mylist)

그리고 파일로 출력 할 수 있습니다.

myfile = open(...)
print >>myfile, ','.join(mylist)

그러나 CSV로 출력하고 목록의 값 주위에 구분 기호가 있습니다.

"value 1", "value 2", ... 

서식에 구분 기호를 포함시키는 쉬운 방법을 찾을 수 없습니다. 예를 들어 join문을 통해 시도했습니다 . 어떻게해야합니까?



답변

import csv

with open(..., 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)

편집 : 이것은 Python 2.x에서만 작동합니다.

python 3.x replace wb와 함께 작동하게하려면 w( 이 SO 답변 참조 )

with open(..., 'w', newline='') as myfile:
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
     wr.writerow(mylist)


답변

Alex Martelli의 보안 버전은 다음과 같습니다.

import csv

with open('filename', 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)


답변

다른 접근 방식의 경우 팬더 에서 DataFrame 을 사용할 수 있습니다. 아래 코드와 같이 쉽게 데이터를 CSV로 덤프 할 수 있습니다.

import pandas
df = pandas.DataFrame(data={"col1": list_1, "col2": list_2})
df.to_csv("./file.csv", sep=',',index=False)


답변

내가 찾은 가장 좋은 옵션 savetxtnumpy모듈 에서를 사용하는 것 입니다 .

import numpy as np
np.savetxt("file_name.csv", data1, delimiter=",", fmt='%s', header=header)

스택해야 할 여러 목록이있는 경우

np.savetxt("file_name.csv", np.column_stack((data1, data2)), delimiter=",", fmt='%s', header=header)


답변

csv쉼표 또는 탭으로 구분 된 파일을 읽고 쓰 려면 파이썬 모듈을 사용하십시오 . csv 모듈은 인용을 잘 제어 할 수 있기 때문에 선호됩니다.

예를 들어, 다음은 잘 작동하는 예입니다.

import csv
data = ["value %d" % i for i in range(1,4)]

out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL)
out.writerow(data)

생산 :

"value 1","value 2","value 3"


답변

이 경우 string.join 메소드를 사용할 수 있습니다.

명확성을 위해 몇 줄로 나눕니다. 여기에 대화식 세션이 있습니다.

>>> a = ['a','b','c']
>>> first = '", "'.join(a)
>>> second = '"%s"' % first
>>> print second
"a", "b", "c"

또는 한 줄로

>>> print ('"%s"') % '", "'.join(a)
"a", "b", "c"

그러나 문자열에 따옴표가 포함되어있어 문제가있을 수 있습니다. 이 경우 탈출 방법을 결정해야합니다.

CSV 모듈은 어떻게 esacpe 제어 많은 charecters에 (큰 따옴표, 또는 (단지 시세 및 seperators 만이 아닌 숫자 필드 등과 필드, 모든 필드) 다양한 인용 옵션 중 하나를 선택할 수 있도록, 당신이 모든 돌볼 수 이스케이프 된 문자열). 값이 단순하면 string.join이 정상일 수 있지만 많은 경우를 관리해야하는 경우 사용 가능한 모듈을 사용하십시오.


답변

이 솔루션은 미쳤지 만 꿀처럼 부드럽게 작동합니다.

import csv

with open('filename', 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL,delimiter='\n')
    wr.writerow(mylist)

파일은 csvwriter에 의해 작성되므로 csv 속성은 쉼표로 구분되어 유지됩니다. 구분자는 매번 목록 항목을 다음 행으로 이동하여 주요 부분에서 도움을줍니다.