StringIO Python 2 đến 3

cung cấp một phương tiện thuận tiện để làm việc với văn bản trong bộ nhớ bằng API tệp [đọc, ghi. vân vân. ]. Có hai triển khai riêng biệt. Phiên bản được viết bằng C cho tốc độ, trong khi được viết bằng Python cho tính di động. Việc sử dụng để xây dựng các chuỗi lớn có thể giúp tiết kiệm hiệu suất so với một số kỹ thuật nối chuỗi khác

Ví dụ

Dưới đây là một số ví dụ khá chuẩn, đơn giản về việc sử dụng bộ đệm

# Find the best implementation available on this platform
try:
    from cStringIO import StringIO
except:
    from StringIO import StringIO

# Writing to a buffer
output = StringIO[]
output.write['This goes into the buffer. ']
print >>output, 'And so does this.'

# Retrieve the value written
print output.getvalue[]

output.close[] # discard buffer memory

# Initialize a read buffer
input = StringIO['Inital value for read buffer']

# Read from the buffer
print input.read[]

Ví dụ này sử dụng read[], nhưng các phương thức và readlines[] cũng có sẵn. Lớp này cũng cung cấp một phương thức seek[] để có thể nhảy xung quanh bộ đệm trong khi đọc, điều này có thể hữu ích cho việc tua lại nếu bạn đang sử dụng một số loại thuật toán phân tích cú pháp nhìn về phía trước

$ python stringio_examples.py

This goes into the buffer. And so does this.

Inital value for read buffer

Các ứng dụng trong thế giới thực bao gồm ngăn xếp ứng dụng web trong đó các phần khác nhau của ngăn xếp có thể thêm văn bản vào phản hồi hoặc kiểm tra đầu ra được tạo bởi các phần của chương trình thường ghi vào tệp

Ứng dụng chúng tôi đang xây dựng tại nơi làm việc bao gồm giao diện tập lệnh shell dưới dạng một số chương trình dòng lệnh. Một số chương trình này chịu trách nhiệm lấy dữ liệu từ cơ sở dữ liệu và kết xuất nó trên bảng điều khiển [để hiển thị cho người dùng hoặc để văn bản có thể dùng làm đầu vào cho lệnh khác]. Các lệnh chia sẻ một tập hợp các plugin định dạng để tạo ra một biểu diễn văn bản của một đối tượng theo nhiều cách khác nhau [XML, cú pháp bash, con người có thể đọc được, v.v. ]. Vì các trình định dạng thường ghi vào đầu ra tiêu chuẩn, nên việc kiểm tra kết quả sẽ hơi phức tạp nếu không có mô-đun StringIO. Sử dụng StringIO để chặn đầu ra của bộ định dạng cho chúng ta một cách dễ dàng để thu thập đầu ra trong bộ nhớ để so sánh với kết quả mong đợi

Chúng ta mới bắt đầu năm 2019, nhưng này, đồng hồ đang kêu tích tắc và chúng ta chỉ có 11 tháng để chuyển tất cả Python2 của mình. Mã X lên phiên bản 3. Bạn đã sẵn sàng chưa?

thông qua GIPHY

Tạo môi trường ảo

Chúng tôi luôn chạy các thư viện Python của mình trong môi trường ảo. Tuy nhiên, bạn không tạo chúng theo cùng một cách. Trong Python 2, bạn làm như thế này

Trong khi đối với Python 3, bạn nên làm như sau

Sau đó, bạn có thể kích hoạt nó như bình thường

Mỗi dự án khác nhau về kích thước và số lượng dòng mã, nhưng bạn, nhà phát triển muốn nhanh chóng về điều này, phải không?

Python có một công cụ hữu ích giúp bạn di chuyển mã cũ của mình sang phiên bản mới chỉ bằng cách chạy một dòng lệnh. 2 đến 3

Lệnh này khá đơn giản. Nếu bạn muốn xem những thay đổi mà nó sẽ thực hiện với mã của bạn, bạn chỉ cần chạy nó như thế này

Nếu bạn muốn viết các thay đổi trực tiếp vào ví dụ của mình. py, vượt qua -w. Đảm bảo sử dụng git [hoặc thứ gì đó tương tự để bạn có thể kiểm tra sự khác biệt]

Và nếu muốn, bạn có thể làm điều gì đó điên rồ như thay đổi tất cả các tệp cùng một lúc

Sau đó, kiểm tra thiệt hại ;-]

Chuỗi, Byte, UTF-8, hay còn gọi là cơn ác mộng của bạn

Trong khi di chuyển PYBOSSA sang Python3, hầu hết các vấn đề về phía chúng tôi đều liên quan đến UTF-8 và cách chúng tôi có các chuỗi trong Python 2

Lời khuyên chung là kiểm tra loại dây và dựa vào đó làm bất cứ điều gì bạn cần

Byte thành chuỗi

if type[foo] == bytes:
	bytes.decode['utf-8']

Chuỗi thành byte

Bạn sẽ có một số nơi mã của bạn sẽ bị lỗi vì bây giờ Python 3 mong đợi Byte thay vì chuỗi. Đối với những trường hợp đó, bạn có thể làm như sau

if type[foo] == str:
	bytes.encode['utf-8']

StringIO và BytesIO

Bạn có thể đã sử dụng StringIO trong mã của mình. Chà, nó sẽ không hoạt động trong quá trình di chuyển của bạn. Bạn sẽ cần phải điều chỉnh nó. Thông thường, tùy thuộc vào loại văn bản, bạn sẽ phải sử dụng StringIO hoặc BytesIO. Cả hai sẽ giải quyết nó cho bạn. Một trường hợp điển hình là như thế này

if type[foo] == bytes:
	data = BytesIO[foo]
else:
	data = StringIO[foo]

CSV và UTF-8

Chúng tôi đã sử dụng ví dụ trình đọc Python 2 CSV UTF-8 cũ được đưa ra trong tài liệu. Đối với Python 2, nó hoạt động rất tốt, nhưng khi bạn dùng thử trong Python 3, mọi thứ trở nên tồi tệ. -]

Giải pháp? . Vâng, gấu trúc. Nó sẽ làm cho cuộc sống của bạn dễ dàng hơn rất nhiều

Pandas sẽ xử lý mọi thứ cho bạn. Tất cả những gì bạn phải làm là thay thế csv_reader của mình bằng cái này

import pandas as pd
df = pd.read_csv[yourfile]

Nếu sau đó bạn cần kiểm tra mã này và bạn không có tệp, hãy sử dụng StringIO hoặc BytesIO trước đó để thực hiện phép thuật. Sau đó, tải nó, và bạn đã hoàn tất

Mã Python 2 có tương thích với Python 3 không?

Python 3 được coi là tương lai của Python và là phiên bản của ngôn ngữ hiện đang được phát triển. Được phát hành vào cuối năm 2008, Python 3 đã giải quyết và sửa đổi các lỗi thiết kế nội tại. Tuy nhiên, Việc áp dụng Python 3 bị chậm do ngôn ngữ không tương thích ngược với Python 2 .

Làm cách nào để hỗ trợ Python 2 và 3?

Vì vậy, để có thể sử dụng nhiều phiên bản Python. .
cài đặt Python 2. x [x là bất kỳ phiên bản nào bạn cần]
cài đặt Python3. x [x là bất kỳ phiên bản nào bạn cần, bạn cũng phải có một phiên bản 3. x >= 3. 3]
mở Dấu nhắc Lệnh
gõ py -2. x để khởi chạy Python 2. x
gõ py -3. x để khởi chạy Python 3. x

Phiên bản nào của StringIO được chọn nhanh nhất?

StringIO [Trăn 2. x] - Phiên bản StringIO nhanh hơn

StringIO có nghĩa là Python là gì?

Chuỗi là tập hợp các bảng chữ cái, từ hoặc các ký tự khác . Nó là một trong những cấu trúc dữ liệu nguyên thủy và là khối xây dựng để thao tác dữ liệu. Python có một lớp chuỗi tích hợp có tên là str. Các chuỗi Python là "bất biến", có nghĩa là chúng không thể thay đổi sau khi chúng được tạo.

Chủ Đề