Hướng dẫn write csv python utf 8 - viết csv python utf 8

Tôi đang cố gắng tạo một tệp văn bản ở định dạng CSV từ PYQT4

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
0. Tôi muốn viết văn bản với mã hóa UTF-8 vì nó chứa các ký tự đặc biệt. Tôi sử dụng mã sau:

import codecs
...
myfile = codecs.open(filename, 'w','utf-8')
...
f = result.table.item(i,c).text()
myfile.write(f+";")

Nó hoạt động cho đến khi tế bào chứa một ký tự đặc biệt. Tôi cũng đã thử với

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")

Nhưng nó cũng dừng lại khi một nhân vật đặc biệt xuất hiện. Tôi không biết tôi đang làm gì sai.

Hướng dẫn write csv python utf 8 - viết csv python utf 8

Ekhumoro

112K19 Huy hiệu vàng218 Huy hiệu bạc324 Huy hiệu đồng19 gold badges218 silver badges324 bronze badges

Hỏi ngày 12 tháng 9 năm 2013 lúc 14:25Sep 12, 2013 at 14:25

5

Nó rất đơn giản cho Python 3.x (tài liệu).

import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')

Đối với Python 2.x, hãy nhìn vào đây.

Đã trả lời ngày 21 tháng 5 năm 2016 lúc 14:50May 21, 2016 at 14:50

Hướng dẫn write csv python utf 8 - viết csv python utf 8

ZanonzanonZanon

Phù hiệu vàng 27.6K20 Hiệu phù vàng123 Huy hiệu đồng20 gold badges111 silver badges123 bronze badges

3

Từ vỏ của bạn chạy:

pip2 install unicodecsv

Và (không giống như câu hỏi ban đầu) giả định bạn đang sử dụng mô -đun ____11 được tích hợp của Python, biến

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
2 thành
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
3 trong mã của bạn.
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
2 into
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
3 in your code.

Đã trả lời ngày 26 tháng 7 năm 2015 lúc 21:19Jul 26, 2015 at 21:19

Hướng dẫn write csv python utf 8 - viết csv python utf 8

Thethethe

20.2k11 Huy hiệu vàng65 Huy hiệu bạc99 Huy hiệu Đồng11 gold badges65 silver badges99 bronze badges

2

Đã trả lời ngày 24 tháng 3 năm 2014 lúc 11:07Mar 24, 2014 at 11:07

Hướng dẫn write csv python utf 8 - viết csv python utf 8

GijsgijsGijs

9,9085 Huy hiệu vàng26 Huy hiệu bạc37 Huy hiệu đồng5 gold badges26 silver badges37 bronze badges

Đối với tôi lớp

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
4 từ tài liệu mô -đun CSV của Python 2 không thực sự hoạt động khi nó phá vỡ giao diện
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
5.

Ví dụ:

csv_writer = csv.writer(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)

hoạt động, trong khi:

csv_writer = UnicodeWriter(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)

Sẽ ném

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
6.

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
4 rõ ràng mong đợi tất cả các giá trị cột là chuỗi, chúng ta có thể tự chuyển đổi các giá trị và chỉ sử dụng mô -đun CSV mặc định:

def to_utf8(lst):
    return [unicode(elem).encode('utf-8') for elem in lst]

...
csv_writer.writerow(to_utf8(row))

Hoặc thậm chí chúng ta có thể CSV_Writer khỉ -patch để thêm chức năng

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
8 - bài tập được để lại cho người đọc.

Đã trả lời ngày 27 tháng 9 năm 2017 lúc 15:11Sep 27, 2017 at 15:11

1

Đối với python2, bạn có thể sử dụng mã này trước

myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
9 Mã này sẽ không chuyển đổi số nguyên thành chuỗi UTF-8python2 you can use this code before
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
9
This code will NOT convert integers to utf-8 strings

def encode_rows_to_utf8(rows):
    encoded_rows = []
    for row in rows:
        encoded_row = []
        for value in row:
            if isinstance(value, basestring):
                value = unicode(value).encode("utf-8")
            encoded_row.append(value)
        encoded_rows.append(encoded_row)
    return encoded_rows

Đã trả lời ngày 29 tháng 1 năm 2019 lúc 11:11Jan 29, 2019 at 11:11

Hướng dẫn write csv python utf 8 - viết csv python utf 8

Pymenpymenpymen

5.05541 Huy hiệu bạc35 Huy hiệu Đồng41 silver badges35 bronze badges

Tôi đã thử sử dụng đề xuất của Bojan nhưng nó đã biến tất cả các ô không thành từ không có gì thay vì trống và hiển thị các phao là 1.2311111111111E+11, có thể là những phiền toái khác. Thêm vào đó, tôi muốn chương trình của mình chạy theo cả Python3 và Python2. Vì vậy, cuối cùng tôi đã đặt ở đầu chương trình:

try:
    csv.writer(open(os.devnull, 'w')).writerow([u'\u03bc'])
    PREPROCESS = lambda array: array
except UnicodeEncodeError:
    logging.warning('csv module cannot handle unicode, patching...')
    PREPROCESS = lambda array: [
        item.encode('utf8')
        if hasattr(item, 'encode') else item
        for item in array
    ]

Sau đó thay đổi tất cả các câu lệnh

import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
0 thành
import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
1

Tôi có thể đã sử dụng thử nghiệm

import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
2 thay vì tuyên bố
import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
3 nhưng điều đó vi phạm "gõ vịt". Tôi có thể xem lại nó và viết rằng một lần lót đầu tiên đúng cách với các câu lệnh
import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
4, để loại bỏ tệp mở lơ lửng và
import csv

with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow('my_utf8_string')
5, nhưng sau đó tôi phải sử dụng tên biến đổi all_caps hoặc pylint sẽ phàn nàn ... nó sẽ được thu thập rác Dù sao, và trong mọi trường hợp chỉ kéo dài trong khi tập lệnh đang chạy.

Đã trả lời ngày 11 tháng 5 lúc 9:52May 11 at 9:52

jcomeau_ictxjcomeau_ictxjcomeau_ictx

37.1k6 Huy hiệu vàng92 Huy hiệu bạc103 Huy hiệu Đồng6 gold badges92 silver badges103 bronze badges

Một hack rất đơn giản là sử dụng nhập JSON thay vì CSV. Ví dụ: thay vì CSV.Writer chỉ cần làm như sau:

    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()

Về cơ bản, với danh sách các trường theo thứ tự chính xác, chuỗi được định dạng JSON giống hệt với dòng CSV ngoại trừ [và] khi bắt đầu và kết thúc tương ứng. Và JSON dường như mạnh mẽ với UTF-8 trong Python 2.*

Đã trả lời ngày 15 tháng 1 năm 2017 lúc 13:38Jan 15, 2017 at 13:38

vpathakvpathakvpathak

1.12312 Huy hiệu bạc12 Huy hiệu đồng12 silver badges12 bronze badges

CSV có hỗ trợ UTF không

và các tập tin CSV.Các tệp CSV đơn giản không hỗ trợ các ký tự Unicode/UTF-8.Đây là một hạn chế của định dạng CSV và không phải là thứ có thể thay đổi trong thân yêu.Tuy nhiên, có thể nhập/xuất các ký tự Unicode theo các bước này.Simple CSV files do not support Unicode/UTF-8 characters. This is a limitation of the CSV format and not something that can be changed in DEAR. However, it is possible to import/export Unicode characters following these steps.

Mã hóa UTF là gì

UTF-8 là một trong những mã hóa được sử dụng phổ biến nhất và Python thường mặc định sử dụng nó.UTF là viết tắt của định dạng chuyển đổi Unicode, và '8' có nghĩa là các giá trị 8 bit được sử dụng trong mã hóa.(Ngoài ra còn có mã hóa UTF-16 và UTF-32, nhưng chúng ít được sử dụng hơn UTF-8.)Unicode Transformation Format”, and the '8' means that 8-bit values are used in the encoding. (There are also UTF-16 and UTF-32 encodings, but they are less frequently used than UTF-8.)

Làm thế nào tạo tệp CSV trong Python?

Viết một CSV vào một từ điển..
Nhập CSV ..
với mở ('python.csv', mode = 'w') là csv_file:.
FieldNames = ['emp_name', 'dept', 'spirit_month'].
writer = csv.dictwriter (csv_file, fieldNames = fieldNames).
writer.writeheader().
writer.writerow ({'emp_name': 'parker', 'dept': 'kế toán', 'spirit_month': 'tháng 11'}).