Đọc tệp json gz python

Khi chúng tôi có yêu cầu tải dữ liệu từ Azure Data Explorer [ADX] sang Azure ML, vì chúng tôi không có tích hợp trực tiếp giữa Azure ML và ADX, chúng tôi đã gặp phải một số thách thức. Chúng tôi đã sử dụng chức năng xuất liên tục trong ADX và xuất tất cả dữ liệu từ ADX sang blob cho mục đích khám phá Thảm họa của ADX. Vì vậy, chúng tôi đã quyết định sử dụng tương tự cho Azure ML. chúng tôi đã làm theo các bước bên dưới để hoàn thành tương tự, Điều này sẽ chỉ hữu ích nếu các tệp của bạn ở định dạng json. định dạng gz. Bạn có thể trực tiếp sử dụng json vì nó không có cấu trúc nén

Tạo tập dữ liệu

Chúng ta có thể sử dụng tùy chọn tạo tập dữ liệu trên Azure ML và tạo tập dữ liệu mới bằng cách chỉ định chi tiết về bộ chứa lưu trữ chứa tất cả json. gz tập tin trong đó

Tạo tập dữ liệu

Tạo bộ dữ liệu giải nén

lặp lại bước trên và chọn tập dữ liệu vào vùng chứa khác để lưu các tệp đã giải nén

Tạo sổ ghi chép

Khi tập dữ liệu đã sẵn sàng, chúng ta có thể tạo một sổ ghi chép mới bằng python và bắt đầu viết mã để trích xuất các tệp từ cửa hàng blob và tải nó vào tập dữ liệu

bây giờ hãy nhập các thư viện cần thiết

from azureml.core import Workspace, Dataset, Datastorefrom azureml.data.dataset_factory import DataType
import gzip
import os

bây giờ hãy chuẩn bị đối tượng không gian làm việc, Điều này sẽ tạo đối tượng không gian làm việc dựa trên các chi tiết được cung cấp, điều này có thể được sử dụng để tạo bộ dữ liệu từ bộ dữ liệu

subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]

bây giờ hãy tạo bộ dữ liệu để xử lý

datastore = Datastore.get[workspace, ‘datastore’]
dest_datastore = Datastore.get[workspace, ‘datastore_unzip’]

Bây giờ chúng tôi muốn chuẩn bị danh sách tệp từ cửa hàng blob, vì chúng tôi đang sử dụng biểu thức ký tự đại diện để lấy tệp từ cửa hàng. Ở đây chúng tôi đang lọc tất cả các json. gz từ bộ chứa blob

datastore_paths = [[datastore, ‘/**.json.gz’]]

bây giờ chúng tôi tạo một Tập dữ liệu tệp tạm thời với các máy chủ ở bước trên và tải các tệp xuống cụm

qc_ds = Dataset.File.from_files[path=datastore_paths]
qc_ds.download[target_path=’.’, overwrite=True]

Bây giờ chúng tôi có danh sách tệp và tất cả các tệp được tải xuống để xử lý, bây giờ chúng tôi sẽ lặp qua danh sách tệp và giải nén từng tệp, Sau đó, tên tệp sẽ được lưu vào danh sách riêng. Azure ML chấp nhận “. tập tin jsonl”. vì tệp được giải nén đã có cấu trúc tệp jsonl, chúng tôi sẽ chỉ đổi tên tệp bằng “. jsonl” thay vì “json. gz”

filelist = []
for singlePath in qc_ds.to_path[]:
with gzip.open[“.” + singlePath, “r”] as f:
data = f.read[]
fn = [“.” + singlePath.replace[“json.gz”, “jsonl”]]
tf = open[fn, “w”]
tf.write[data.decode[]]
tf.close[]
filelist.append[os.path.abspath[fn]]

bây giờ chúng tôi có các tệp được giải nén và danh sách của nó với chúng tôi, vì vậy, hãy tải các tệp này lên kho dữ liệu mà chúng tôi đã tạo như một phần của bước thứ hai

dest_datastore.upload_files[filelist, overwrite=True]

sau khi dữ liệu được trích xuất và có sẵn trong kho lưu trữ dữ liệu, tập dữ liệu có thể sử dụng dữ liệu tương tự để xử lý thêm

Để tạo tập dữ liệu từ kho dữ liệu, chúng tôi sẽ tạo tập dữ liệu Dạng bảng mới bằng cách lọc '*. jsonl'

Mô-đun này cung cấp một giao diện đơn giản để nén và giải nén các tệp giống như các chương trình GNU gzip và gunzip.

Việc nén dữ liệu được cung cấp bởi mô-đun

Mô-đun cung cấp lớp, cũng như các chức năng tiện ích và tiện lợi. Lớp đọc và ghi các tệp định dạng gzip, tự động nén hoặc giải nén dữ liệu để nó trông giống như một tệp thông thường

Lưu ý rằng các định dạng tệp bổ sung có thể được giải nén bởi các chương trình gzip và gunzip, chẳng hạn như các định dạng được tạo bởi nén và đóng gói, không được mô-đun này hỗ trợ

Mô-đun xác định các mục sau

gzip. mở[tên tệp , chế độ='rb' , mức nén=9 , mã hóa=Không có , lỗi=Không có , dòng mới=Không có]

Mở tệp nén gzip ở chế độ nhị phân hoặc văn bản, trả về một

Đối số tên tệp có thể là tên tệp thực [a hoặc đối tượng] hoặc đối tượng tệp hiện có để đọc hoặc ghi vào

Đối số chế độ có thể là bất kỳ trong số

import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
4,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
6,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
7,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
8,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
9,
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
30 hoặc
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
31 đối với chế độ nhị phân hoặc
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
32,
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
33,
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
34 hoặc
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
35 đối với chế độ văn bản. Mặc định là
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5

Đối số nénlevel là một số nguyên từ 0 đến 9, đối với hàm tạo

Đối với chế độ nhị phân, chức năng này tương đương với hàm tạo.

subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
39. Trong trường hợp này, không được cung cấp mã hóa, lỗi và đối số dòng mới

Đối với chế độ văn bản, một đối tượng được tạo và được bao bọc trong một phiên bản có mã hóa, hành vi xử lý lỗi và [các] kết thúc dòng được chỉ định

Đã thay đổi trong phiên bản 3. 3. Đã thêm hỗ trợ cho tên tệp là một đối tượng tệp, hỗ trợ cho chế độ văn bản và mã hóa, lỗi và đối số dòng mới.

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ cho các chế độ

subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
30,
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
31 và
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
35.

Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

ngoại lệ gzip. BadGzipFile

Một ngoại lệ được đưa ra cho các tệp gzip không hợp lệ. Nó kế thừa. và cũng có thể được nâng lên đối với các tệp gzip không hợp lệ

Mới trong phiên bản 3. 8

lớp gzip. GzipFile[tên tệp=Không , chế độ=Không có , mức nén=9 , fileobj=Không , mthời gian=Không có]

Trình xây dựng cho lớp, mô phỏng hầu hết các phương thức của a , ngoại trừ phương thức

datastore = Datastore.get[workspace, ‘datastore’]
dest_datastore = Datastore.get[workspace, ‘datastore_unzip’]
49. Ít nhất một trong số fileobj và tên tệp phải được cung cấp một giá trị không tầm thường

Thể hiện của lớp mới dựa trên fileobj, có thể là tệp thông thường, đối tượng hoặc bất kỳ đối tượng nào khác mô phỏng tệp. Nó mặc định là

datastore_paths = [[datastore, ‘/**.json.gz’]]
71, trong trường hợp đó tên tệp được mở để cung cấp một đối tượng tệp

Khi fileobj không phải là

datastore_paths = [[datastore, ‘/**.json.gz’]]
71, đối số tên tệp chỉ được sử dụng để đưa vào tiêu đề tệp gzip, tiêu đề này có thể bao gồm tên tệp gốc của tệp không nén. Nó mặc định là tên tệp của fileobj, nếu có thể thấy rõ;

Đối số chế độ có thể là bất kỳ

import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
4,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
6,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
7,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
8,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
9,
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
30 hoặc
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
31, tùy thuộc vào việc tệp sẽ được đọc hay ghi. Mặc định là chế độ của fileobj nếu có thể thấy rõ; . Trong các bản phát hành Python trong tương lai, chế độ fileobj sẽ không được sử dụng. Tốt hơn là luôn chỉ định chế độ viết

Lưu ý rằng tệp luôn được mở ở chế độ nhị phân. Để mở tệp nén ở chế độ văn bản, hãy sử dụng [hoặc ngắt dòng của bạn bằng dấu ]

Đối số mức độ nén là một số nguyên từ

datastore_paths = [[datastore, ‘/**.json.gz’]]
95 đến
datastore_paths = [[datastore, ‘/**.json.gz’]]
96 kiểm soát mức độ nén; .
datastore_paths = [[datastore, ‘/**.json.gz’]]
95 không nén. Mặc định là
datastore_paths = [[datastore, ‘/**.json.gz’]]
96

Đối số mtime là dấu thời gian dạng số tùy chọn được ghi vào trường thời gian sửa đổi cuối cùng trong luồng khi nén. Nó chỉ nên được cung cấp ở chế độ nén. Nếu bỏ qua hoặc

datastore_paths = [[datastore, ‘/**.json.gz’]]
71, thời gian hiện tại được sử dụng. Xem thuộc tính để biết thêm chi tiết

Việc gọi phương thức

datastore_paths = [[datastore, ‘/**.json.gz’]]
74 của một đối tượng không đóng fileobj, vì bạn có thể muốn nối thêm tài liệu sau dữ liệu đã nén. Điều này cũng cho phép bạn chuyển một đối tượng được mở để ghi dưới dạng fileobj và truy xuất bộ nhớ đệm kết quả bằng phương thức của đối tượng

hỗ trợ giao diện, bao gồm phép lặp và câu lệnh. Chỉ phương pháp

datastore = Datastore.get[workspace, ‘datastore’]
dest_datastore = Datastore.get[workspace, ‘datastore_unzip’]
49 không được triển khai

cũng cung cấp phương thức và thuộc tính sau

nhòm[n]

Đọc n byte không nén mà không tăng vị trí tệp. Nhiều nhất một lần đọc trên luồng nén được thực hiện để đáp ứng cuộc gọi. Số byte được trả về có thể nhiều hơn hoặc ít hơn yêu cầu

Ghi chú

Trong khi gọi không thay đổi vị trí tệp của , nó có thể thay đổi vị trí của đối tượng tệp bên dưới [e. g. nếu được xây dựng với fileobj tham số]

Mới trong phiên bản 3. 2

thời gian

Khi giải nén, giá trị của trường thời gian sửa đổi cuối cùng trong tiêu đề được đọc gần đây nhất có thể được đọc từ thuộc tính này, dưới dạng số nguyên. Giá trị ban đầu trước khi đọc bất kỳ tiêu đề nào là

datastore_paths = [[datastore, ‘/**.json.gz’]]
71

Tất cả các luồng nén gzip đều phải chứa trường dấu thời gian này. Một số chương trình, chẳng hạn như gunzip, sử dụng dấu thời gian. Định dạng giống như giá trị trả về và thuộc tính của đối tượng được trả về bởi

Đã thay đổi trong phiên bản 3. 1. Hỗ trợ cho câu lệnh đã được thêm vào, cùng với đối số và thuộc tính hàm tạo mtime.

Đã thay đổi trong phiên bản 3. 2. Đã thêm hỗ trợ cho các tệp không đệm và không thể tìm thấy.

Đã thay đổi trong phiên bản 3. 3. Phương thức hiện đã được triển khai.

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ cho chế độ

subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
30 và
subscription_id = ‘your-subscription-id’
resource_group = ‘your-resourcegroup-name’
workspace_name = ‘your-workspace-name’
workspace = Workspace[subscription_id, resource_group, workspace_name]
31.

Đã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ viết tùy ý. Phương thức hiện chấp nhận một đối số của

datastore_paths = [[datastore, ‘/**.json.gz’]]
71.

Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

Không dùng nữa kể từ phiên bản 3. 9. Việc mở để viết mà không chỉ định đối số chế độ không được chấp nhận.

gzip. nén[dữ liệu , mức nén=9 , * , mthời gian=Không có]

Nén dữ liệu, trả về một đối tượng chứa dữ liệu đã nén. nénlevel và mtime có cùng ý nghĩa như trong hàm tạo ở trên. Khi mtime được đặt thành

datastore_paths = [[datastore, ‘/**.json.gz’]]
95, chức năng này tương đương với wbit được đặt thành
filelist = []
for singlePath in qc_ds.to_path[]:
with gzip.open[“.” + singlePath, “r”] as f:
data = f.read[]
fn = [“.” + singlePath.replace[“json.gz”, “jsonl”]]
tf = open[fn, “w”]
tf.write[data.decode[]]
tf.close[]
filelist.append[os.path.abspath[fn]]
02. Chức năng zlib nhanh hơn

Mới trong phiên bản 3. 2

Đã thay đổi trong phiên bản 3. 8. Đã thêm tham số mtime cho đầu ra có thể lặp lại.

Đã thay đổi trong phiên bản 3. 11. Tốc độ được cải thiện bằng cách nén tất cả dữ liệu cùng một lúc thay vì theo kiểu truyền phát. Các cuộc gọi với mtime được đặt thành

datastore_paths = [[datastore, ‘/**.json.gz’]]
95 được ủy quyền để có tốc độ tốt hơn.

gzip. giải nén[dữ liệu]

Giải nén dữ liệu, trả về một đối tượng chứa dữ liệu không nén. Chức năng này có khả năng giải nén dữ liệu gzip nhiều thành viên [nhiều khối gzip nối với nhau]. Khi dữ liệu chắc chắn chỉ chứa một thành viên, hàm có wbits được đặt thành 31 sẽ nhanh hơn

Chủ Đề