Quá trình nén và giải nén tệp diễn ra như thế nào trong Python?

Giả sử chúng ta có hai danh sách, một danh sách bao gồm tên và danh sách còn lại bao gồm họ. Chúng tôi muốn bằng cách nào đó kết hợp tên đầu tiên với họ tương ứng dưới dạng bộ dữ liệu. Nói cách khác, chúng tôi muốn kết hợp các phần tử từ nhiều lần lặp có cùng chỉ mục với nhau trong một danh sách các bộ dữ liệu

list_1 = [‘Jane’, ‘John’, ‘Jennifer’]
list_2 = [‘Doe’, ‘Williams’, ‘Smith’]
Desired Output:
[['Jane', 'Doe'], ['John', 'Williams'], ['Jennifer', 'Smith']]

hàm zip[]

Chúng ta có thể thực hiện điều này với chức năng, đây là chức năng python được tích hợp sẵn. Hàm zip[] được đặt tên do cơ chế tương tự của nó như các khóa kéo vật lý. Khi bạn nén một cái gì đó, bạn mang cả hai bên lại với nhau. Và đó là cách chức năng zip[] hoạt động. Nó mang các phần tử của cùng một chỉ mục từ nhiều đối tượng có thể lặp lại với nhau dưới dạng các phần tử của cùng một bộ dữ liệu

zip[* iterables]

Hàm zip[] nhận các iterables làm đối số, chẳng hạn như danh sách, tệp, bộ dữ liệu, bộ, v.v. Sau đó, hàm zip[] sẽ tạo một trình vòng lặp tổng hợp các phần tử từ mỗi vòng lặp được truyền vào. Nói cách khác, nó sẽ trả về một bộ lặp của các bộ lặp, trong đó bộ thứ i sẽ chứa phần tử thứ i từ mỗi bộ lặp được truyền vào. Iterator này sẽ dừng khi iterable đầu vào ngắn nhất đã cạn kiệt

Sử dụng hàm zip[]

Chà, dựa trên mục tiêu trên, chúng tôi có hai danh sách [là các đối tượng có thể lặp lại] và chúng tôi muốn kết hợp các phần tử được lập chỉ mục giống nhau từ mỗi danh sách này lại với nhau. Vì vậy, chúng ta có thể sử dụng hàm zip[] để thực hiện việc này như sau

first_names = [‘Jane’, ‘John’, ‘Jennifer’]
last_names = [‘Doe’, ‘Williams’, ‘Smith’]
full_names = list[zip[first_names, last_names]]print[full_names]
# [['Jane', 'Doe'], ['John', 'Williams'], ['Jennifer', 'Smith']]

Hãy nhớ rằng, hàm zip[] trả về một trình vòng lặp. Vì vậy, chúng ta cần sử dụng hàm list[] sẽ sử dụng trình lặp được trả về này [hoặc đối tượng zip] để tạo danh sách. Ngoài ra, miễn là các lần lặp được truyền vào được sắp xếp theo thứ tự [chuỗi], thì các bộ dữ liệu sẽ chứa các phần tử theo cùng thứ tự từ trái sang phải của các đối số được truyền trong hàm zip[]

Hai hàm thú vị cần biết trong Python

Tìm hiểu cách tạo bảng có lập bảng và hiển thị thanh tiến trình với tqdm trong Python

hướng tới khoa học dữ liệu. com

Nếu chúng ta có ba đối tượng có thể lặp lại thì sao?

Giả sử chúng ta có một danh sách khác, age, chứa tuổi của cá nhân tương ứng trong hai danh sách khác, first_names và last_names. Chúng tôi cũng muốn bao gồm các độ tuổi trong tuple với tên và họ. Chà, như đã đề cập ở trên, hàm zip[] nhận bất kỳ số lần lặp nào

first_names = ['Jane', 'John', 'Jennifer']
last_names = ['Doe', 'Williams', 'Smith']
ages = [20, 40, 30]
names_and_ages = list[zip[first_names, last_names, ages]]print[names_and_ages]
# [['Jane', 'Doe', 20], ['John', 'Williams', 40], ['Jennifer', 'Smith', 30]]

Lưu ý cách name_and_ages chứa các bộ có n phần tử [cùng số lượng đối số hoặc đối tượng có thể lặp lại, chúng tôi đã chuyển vào hàm zip[]]

Truyền một đối số vào zip[]

Nếu chúng ta chỉ chuyển một đối tượng có thể lặp lại vào hàm zip[], thì chúng ta sẽ nhận được danh sách các bộ dữ liệu 1 mục như sau

first_names = ['Jane', 'John', 'Jennifer']print[list[zip[first_names]]]
# [['Jane',], ['John',], ['Jennifer',]]

Iterables với độ dài không bằng nhau

Điều gì sẽ xảy ra nếu chúng ta chuyển vào danh sách [hoặc các đối tượng có thể lặp lại khác] có độ dài không bằng nhau? . Chà, như đã đề cập ở trên, trình lặp được trả về bởi hàm zip[] sẽ dừng sau khi hết lần lặp đầu vào ngắn nhất. Nói cách khác, danh sách các bộ dữ liệu của chúng ta sẽ chỉ chứa các phần tử từ các chỉ mục có trong tất cả các lần lặp được truyền vào hàm zip[]. Do đó, các phần tử còn lại trong các lần lặp dài hơn sẽ bị bỏ qua

first_names = [‘Jane’, ‘John’, ‘Jennifer’]
last_names = [‘Doe’, ‘Williams’, ‘Smith’, 'Jones']
full_names = list[zip[first_names, last_names]]print[full_names]
# [['Jane', 'Doe'], ['John', 'Williams'], ['Jennifer', 'Smith']]

Nếu cần các phần tử trong các lần lặp dài hơn, thì chúng ta có thể sử dụng hàm [zip_longest[] nằm trong mô-đun itertools] thay vì hàm zip[]. Nó sẽ tiếp tục cho đến khi hết lần lặp dài nhất và sẽ thay thế mọi giá trị bị thiếu bằng giá trị được truyền cho đối số giá trị điền [mặc định là Không có]

Lặp lại song song của Iterables

Chúng ta có thể sử dụng hàm zip[] để lặp song song qua nhiều lần lặp. Vì hàm zip[] trả về một trình lặp, nên chúng ta có thể sử dụng đối tượng zip này [trình lặp mà nó trả về] trong một vòng lặp for. Và vì với mỗi lần lặp của trình vòng lặp này, một bộ được trả về, chúng ta có thể giải nén các phần tử của bộ này trong vòng lặp for

first_names = ['Jane', 'John', 'Jennifer']
last_names = ['Doe', 'Williams', 'Smith']
for first, last in zip[first_names, last_names]:
print[first, last]
# Output:
Jane Doe
John Williams
Jennifer Smith

Hoặc chúng ta có thể có ba lần lặp

first_names = [‘Jane’, ‘John’, ‘Jennifer’]
last_names = [‘Doe’, ‘Williams’, ‘Smith’]
ages = [20, 40, 30]
for first, last, age in zip[first_names, last_names, ages]:
print[f’{first} {last} is {age} years old’]
# Output:
Jane Doe is 20 years old
John Williams is 40 years old
Jennifer Smith is 30 years old

Một ví dụ khác về phép lặp song song

Chúng tôi có hai danh sách. danh sách doanh thu và danh sách chi phí. Chúng tôi muốn lập một danh sách mới, lợi nhuận, đó là phần chênh lệch giữa doanh thu và chi phí. Chúng ta có thể thực hiện điều này bằng cách sử dụng phép lặp song song

revenue = [30000, 50000, 70000, 90000]
cost = [10000, 15000, 20000, 30000]
profit = []
total_profit = 0
for revenue, cost in zip[revenue, cost]:
profit.append[revenue — cost]
total_profit += revenue — cost
print[profit]
# [20000, 35000, 50000, 60000]
print[total_profit]
# 165000

Cách dễ dàng tạo bảng trong Python

Cách sử dụng chức năng lập bảng để tạo các bảng có định dạng độc đáo trong Python

hướng tới khoa học dữ liệu. com

giải nén trong python

Giả sử rằng chúng ta có danh sách các bộ dữ liệu sau

________số 8_______

Và chúng tôi muốn tách các phần tử trong các bộ dữ liệu này thành hai danh sách riêng biệt. Chà, vì điều đó ngược lại với nén [ghép mọi thứ lại với nhau], nên nó sẽ là giải nén [tách rời mọi thứ ra]. Để giải nén trong python, chúng ta có thể sử dụng toán tử giải nén * với hàm zip[] như sau

first_names, last_names = zip[*first_and_last_names]first_names = list[first_names]
last_names = list[last_names]
print[first_names]
# ['Jane', 'John', 'Jennifer']
print[last_names]
# ['Doe', 'Williams', 'Smith']

Toán tử giải nén * sẽ giải nén danh sách các bộ dữ liệu first_and_last_names thành các bộ dữ liệu của nó. Các bộ dữ liệu này sau đó sẽ được chuyển đến hàm zip[], hàm này sẽ lấy các đối tượng có thể lặp lại riêng biệt này [các bộ dữ liệu] và kết hợp các phần tử có cùng chỉ mục của chúng với nhau thành các bộ dữ liệu, tạo thành hai bộ dữ liệu riêng biệt. Cuối cùng, thông qua việc giải nén bộ dữ liệu, các bộ dữ liệu riêng biệt này sẽ được gán cho các biến first_names và last_names. Sau đó, chúng tôi sử dụng hàm list[] để chuyển đổi các bộ dữ liệu này thành danh sách

Để biết thêm về các toán tử giải nén [* và **], iterables, iterators và iteration, hãy xem hai blog sau

Giải nén toán tử trong Python

Sử dụng toán tử giải nén * và ** trong python

hướng tới khoa học dữ liệu. com

Iterables và Iterators trong Python

Iterables, iterators và iteration trong Python

hướng tới khoa học dữ liệu. com

Nếu bạn thích đọc những câu chuyện như thế này và muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký để trở thành thành viên Medium. Đó là 5 đô la một tháng, cho phép bạn truy cập không giới hạn vào các câu chuyện trên Phương tiện. Nếu bạn đăng ký bằng liên kết của tôi, tôi sẽ kiếm được một khoản hoa hồng nhỏ

Tham gia Medium với liên kết giới thiệu của tôi — Luay Matalka

Đọc mọi câu chuyện từ Luay Matalka [và hàng nghìn nhà văn khác trên Medium]. Phí thành viên của bạn hỗ trợ trực tiếp…

lamtalka90. trung bình. com

Phần kết luận

Trong hướng dẫn này, chúng ta đã xem xét cách chức năng zip[] hoạt động trong python. Chúng tôi đã tìm hiểu cách hàm zip[] hoạt động trong các tình huống khác nhau, chẳng hạn như với một lần lặp hoặc với các lần lặp có độ dài không bằng nhau. Sau đó, chúng tôi đã xem cách chúng tôi có thể sử dụng hàm zip[] để lặp song song trên nhiều đối tượng có thể lặp lại. Và cuối cùng, chúng ta đã học cách sử dụng toán tử giải nén * để giải nén các đối tượng trong python

Zip và giải nén hoạt động như thế nào trong Python?

Ví dụ 1. Giải nén tất cả các tệp có trong zip . Import the zipfile module Create a zip file object using ZipFile class. Gọi phương thức extractall[] trên đối tượng tệp zip và chuyển đường dẫn nơi các tệp cần được giải nén và Giải nén tệp cụ thể có trong tệp zip.

Nén và giải nén tệp hoạt động như thế nào?

Các tệp ZIP hoạt động giống như một thư mục tiêu chuẩn trên máy tính của bạn. Chúng chứa dữ liệu và tệp cùng nhau ở một nơi. Nhưng với các tệp nén, nội dung được nén, giúp giảm lượng dữ liệu mà máy tính của bạn sử dụng. Một cách khác để mô tả các tệp ZIP là một kho lưu trữ

Hàm zip hoạt động như thế nào trong Python?

Hàm zip[] của Python

Làm cách nào để ZIP tệp trong Python?

Để nén các tệp riêng lẻ thành một tệp ZIP, tạo một đối tượng ZipFile mới và thêm các tệp bạn muốn nén bằng phương thức write[]. With zipfile. ZipFile[] , specify the path of a newly created ZIP file as the first parameter file , and set the second parameter mode to 'w' [write].

Chủ Đề