Cách nhập utf-8 trong python

Bài viết này liên quan đến việc chuyển đổi và xử lý các định dạng tệp CSV kết hợp với tiêu chuẩn mã hóa UTF-8

💡 Định dạng Chuyển đổi Unicode 8-Bit [UTF-8] là mã hóa ký tự có độ rộng thay đổi được sử dụng cho giao tiếp điện tử. UTF-8 có thể mã hóa hơn 1 triệu ký tự [ít nhiều kỳ lạ] bằng cách sử dụng đơn vị mã 1 đến 4 byte. Ví dụ ký tự UTF-8. ☈,☇,★,☃,☄,☍

UTF-8 là tiêu chuẩn mã hóa mặc định trên Windows, Linux và macOS

Nếu bạn viết một tệp CSV bằng các thao tác xử lý tệp tiêu chuẩn của Python, chẳng hạn như open[] và tệp. write[], Python sẽ tự động tạo tệp UTF-8

Vì vậy, nếu bạn truy cập trang web này để tìm kiếm “CSV sang UTF-8”, tôi đoán là bạn đã đọc một định dạng tệp CSV được mã hóa khác, chẳng hạn như ASCII, ANSI hoặc UTF-16 với một số ký tự “lạ”.

Giả sử, bạn muốn đọc tệp ANSI này

Giờ đây, bạn có thể chỉ cần chuyển đổi tệp này thành tệp CSV UTF-8 thông qua phương pháp sau

Chuyển đổi CSV sang UTF-8 trong Python

Cách tiếp cận không có thư viện để chuyển đổi tệp CSV thành tệp CSV UTF-8 là mở tệp đầu tiên ở định dạng không phải UTF-8 và viết lại nội dung của nó trong tệp UTF-8 ngay lập tức. Bạn có thể sử dụng đối số

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
6 của hàm
import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
5 để đặt mã hóa của tệp được đọc

with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w'] as outfile:
     outfile.write[infile.read[]]

Sau khi chuyển đổi từ ANSI sang UTF-8 bằng phương pháp đã cho, tệp CSV mới hiện có định dạng UTF-8

Trình đọc/ghi CSV – Chuyển đổi CSV sang UTF-8

Bạn không cần trình đọc CSV để chuyển đổi CSV thành UTF-8 như minh họa trong ví dụ trước. Tuy nhiên, nếu bạn muốn làm như vậy, hãy đảm bảo chuyển đối số

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
6 khi mở trình đọc tệp được sử dụng để tạo đối tượng Trình đọc CSV

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]

Đối số

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
8 bổ sung có sẵn để ngăn Windows thêm một dòng mới khi viết mỗi hàng

Đầu ra là cùng một CSV được mã hóa UTF-8

Pandas – Chuyển đổi CSV sang UTF-8

Bạn có thể sử dụng các hàm

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
9 và
import pandas as pd


df = pd.read_csv['my_file.csv', encoding='ANSI']
df.to_csv['my_file_utf8.csv', encoding='utf-8', index=False]
0 để đọc và ghi tệp CSV bằng nhiều mã hóa khác nhau [e. g. , UTF-8, ASCII, ANSI, ISO] như được định nghĩa trong đối số
import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
6 của cả hai hàm

Đây là một ví dụ

import pandas as pd


df = pd.read_csv['my_file.csv', encoding='ANSI']
df.to_csv['my_file_utf8.csv', encoding='utf-8', index=False]

ANSI sang UTF-8

Cách tiếp cận không có thư viện để chuyển đổi tệp CSV được mã hóa ANSI thành tệp CSV được mã hóa UTF-8 là mở tệp đầu tiên ở định dạng ANSI và viết lại nội dung của nó trong tệp UTF-8. Sử dụng đối số

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
6 của hàm
import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
5 để đặt mã hóa của tệp sẽ được đọc

Đây là một ví dụ

with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w'] as outfile:
     outfile.write[infile.read[]]

Điều này chuyển đổi tệp ANSI sau thành tệp UTF-8

liên quan Tú

Chris

Trong khi làm việc với tư cách là nhà nghiên cứu về các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Đây là một vấn đề tôi đã giải quyết ngày hôm nay. Tôi có một tệp CSV để phân tích cú pháp chứa các chuỗi UTF-8 và tôi muốn phân tích cú pháp tệp đó bằng Python. Tôi muốn làm điều đó theo cách hoạt động trong cả Python 2. 7 và Trăn 3

Điều này đã được chứng minh là không tầm thường, vì vậy bài đăng trên blog này là một bản tóm tắt nhanh về những gì tôi đã làm, với hy vọng nó hữu ích cho người khác và/hoặc bản thân tôi trong tương lai

Báo cáo vấn đề

Xem xét ví dụ tối thiểu sau đây về tệp CSV

1,alïce
2,bøb
3,cárol

Chúng tôi muốn phân tích điều này thành một danh sách các danh sách

[
    ["1", "alïce"],
    ["2", "bøb"],
    ["3", "cárol"],
]

thí nghiệm

Đoạn mã sau có thể đọc tệp trong Python 2. 7;

import csv

with open["example.csv", "rb"] as csvfile:
    csvreader = csv.reader[csvfile, delimiter=","]

    for row in csvreader:
        row = [entry.decode["utf8"] for entry in row]
        print[": ".join[row]]

Nhưng nếu bạn chạy mã đó trong Python 3, bạn sẽ gặp lỗi sau

Traceback [most recent call last]:
  File "reader2.py", line 6, in 
    for row in csvreader:
_csv.Error: iterator should return strings, not bytes [did you open the file in text mode?]

Đoạn mã sau có thể đọc tệp trong Python 3

________số 8

Nhưng đối số

[
    ["1", "alïce"],
    ["2", "bøb"],
    ["3", "cárol"],
]
1 với
[
    ["1", "alïce"],
    ["2", "bøb"],
    ["3", "cárol"],
]
2 chỉ có trong Python 3 trở lên, vì vậy bạn không thể sử dụng đối số này trong Python 2

Về lý thuyết, điều này được nhập vào dưới dạng , nhưng tôi gặp một lỗi khác nếu tôi sử dụng

[
    ["1", "alïce"],
    ["2", "bøb"],
    ["3", "cárol"],
]
3 trong tệp này với Python 2. 7

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
2

Điều này có vẻ như chỉ có thể sử dụng thư viện tiêu chuẩn, nhưng nó đã trở nên phức tạp đến mức tôi không muốn bận tâm

Tôi đã cân nhắc việc xác định đây là hai chức năng riêng biệt và chạy

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
3

nhưng điều đó cảm thấy hơi khó chịu và sẽ gây khó chịu cho phạm vi bảo hiểm mã. Việc có hai chức năng riêng biệt cũng tạo ra một nguồn lỗi – tôi có thể nhớ cập nhật một chức năng nhưng không cập nhật chức năng kia

Tôi đã tìm thấy csv23 trên PyPI, có mô tả giống với những gì tôi muốn. Đoạn mã sau làm những gì tôi muốn

import csv


with open['my_file.csv', 'r', encoding='ANSI', errors='ignore'] as infile:
    with open['my_file_utf8.csv', 'w', newline=''] as outfile:
        reader = csv.reader[infile]
        writer = csv.writer[outfile]
        for row in reader:
            print[row]
            writer.writerow[row]
4

Điều này đọc tệp CSV dưới dạng UTF-8 trong cả Python 2 và 3. Việc có thư viện của bên thứ ba hơi khó chịu, nhưng sẽ dễ dàng hơn là cố gắng tự viết, kiểm tra và duy trì chức năng này

Cách đặt bộ ký tự UTF

Thêm bộ ký tự='utf8' vào MySQLdb của bạn. gọi connect[] .

Cách nhập tệp CSV sử dụng UTF

Trình đọc/ghi CSV – Chuyển đổi CSV sang UTF-8 .
với open['my_file. csv', 'r', encoding='ANSI', error='ignore'] dưới dạng tệp tin
với mở ['my_file_utf8. csv', 'w', newline=''] dưới dạng tệp ngoài
người đọc = csv. người đọc [infile]
nhà văn = csv. nhà văn [outfile]
cho hàng trong đầu đọc
in [hàng]
nhà văn. hàng viết [hàng]

Chủ Đề