PyQt4에서 csv 형식의 텍스트 파일을 만들려고합니다 QTableWidget
. 특수 문자가 포함되어 있으므로 UTF-8 인코딩으로 텍스트를 작성하고 싶습니다. 다음 코드를 사용합니다.
import codecs
...
myfile = codecs.open(filename, 'w','utf-8')
...
f = result.table.item(i,c).text()
myfile.write(f+";")
셀에 특수 문자가 포함될 때까지 작동합니다. 나는 또한 시도했다
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
그러나 특수 문자가 나타나면 중지됩니다. 나는 내가 뭘 잘못하고 있는지 전혀 모른다.
답변
쉘에서 다음을 실행하십시오.
pip2 install unicodecsv
그리고 (원래의 질문과는 달리) 파이썬의 내장 사용하고있는 추정 csv
모듈, 턴
import csv
으로
import unicodecsv as csv
코드에서.
답변
답변
이 패키지를 사용하면 작동합니다 : https://github.com/jdunck/python-unicodecsv .
답변
나를 위해 UnicodeWriter
Python 2 CSV 모듈 문서 의 클래스는 csv.writer.write_row()
인터페이스를 깨뜨리기 때문에 실제로 작동하지 않았습니다 .
예를 들면 :
csv_writer = csv.writer(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
작동하는 동안 :
csv_writer = UnicodeWriter(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
던질 것 AttributeError: 'int' object has no attribute 'encode'
입니다.
UnicodeWriter
모든 열 값이 문자열이 될 것으로 예상 했듯이 값을 직접 변환하고 기본 CSV 모듈을 사용할 수 있습니다.
def to_utf8(lst):
return [unicode(elem).encode('utf-8') for elem in lst]
...
csv_writer.writerow(to_utf8(row))
또는 원숭이 패치 csv_writer로 write_utf8_row
함수 를 추가 할 수도 있습니다 . 연습은 독자에게 맡겨집니다.
답변
Python 문서의 예제는 유니 코드 CSV 파일 작성 방법을 보여줍니다. http://docs.python.org/2/library/csv.html#examples
(저작권으로 보호되기 때문에 여기에서 코드를 복사 할 수 없습니다.)
답변
들어 python2 전에이 코드를 사용하여 csv_writer.writerows(rows)
이 코드는 UTF-8 문자열을 정수로 변환되지 않습니다
def encode_rows_to_utf8 (행) : encode_rows = [] 행의 행 : encode_row = [] 행 값 : 인스턴스 (값, 기본 문자열) 인 경우 : 값 = unicode (값) .encode ( "utf-8") encode_row.append (값) encoding_rows.append (encoded_row) 인코딩 된 행 반환
답변
매우 간단한 해킹은 csv 대신 json 가져 오기를 사용하는 것입니다. 예를 들어 csv.writer 대신 다음을 수행하십시오.
fd = codecs.open(tempfilename, 'wb', 'utf-8')
for c in whatever :
fd.write( json.dumps(c) [1:-1] ) # json dumps writes ["a",..]
fd.write('\n')
fd.close()
기본적으로 올바른 순서의 필드 목록이 주어지면 json 형식의 문자열은 각각 시작과 끝의 [및]를 제외하고 csv 행과 동일합니다. 그리고 json은 python 2에서 utf-8에 견고 해 보입니다. *