JSON [Ký hiệu đối tượng JavaScript] là một công cụ lưu trữ và truyền dữ liệu phổ biến được sử dụng trong nhiều chương trình phía máy chủ. Python hỗ trợ JSON bằng cách sử dụng gói dựng sẵn có tên là json. Chúng tôi có thể chuyển đổi cấu trúc JSON thành cấu trúc văn bản được phân cách bằng dấu phẩy. Trong bài viết này, bạn sẽ tìm hiểu về các phương pháp khác nhau để chuyển đổi cấu trúc JSON sang CSV
Tệp CSV là gì?
CSV [Giá trị được phân tách bằng dấu phẩy] là định dạng tệp được sử dụng để lưu trữ dữ liệu theo kiểu bảng. Cấu trúc của tệp CSV có thể được diễn giải ở định dạng bảng tính hoặc cơ sở dữ liệu. Nó có thể lưu trữ dữ liệu ở dạng văn bản thuần túy [thường là kiểu dữ liệu chuỗi & số]. Mỗi dòng của một. tệp csv xác định bản ghi dữ liệu. Bản ghi sẽ chứa một hoặc nhiều trường có giá trị được phân tách bằng dấu phẩy
Chuyển đổi JSON sang CSV
Dữ liệu JSON thường chứa dữ liệu theo cặp khóa-giá trị. Các khóa này sẽ là tiêu đề cho tệp CSV và các giá trị dưới dạng dữ liệu mô tả vẫn được thụt vào trong json
Phương pháp 1. Sử dụng mô-đun CSV
Đây là một mô-đun Python tích hợp triển khai các lớp để đọc và ghi dữ liệu dạng bảng trong cấu trúc CSV. Sử dụng điều này, các lập trình viên có thể ghi dữ liệu này ở định dạng được Excel phê duyệt hoặc đọc dữ liệu từ tệp excel hoặc CSV. Các lập trình viên và nhà phát triển cũng có thể trình bày các định dạng CSV được các ứng dụng khác nhận dạng hoặc xác định các định dạng CSV có mục đích đặc biệt của họ. Đây là mô-đun được sử dụng rộng rãi nhất. Vì là mô-đun tích hợp nên bạn không cần cài đặt riêng
Chương trình
import json
import csv
# Open the JSON file & load its data
with open['data_file.json'] as dat_file:
data = json.load[dat_file]
stud_data = data['stud_details']
# Opening a CSV file for writing in write mode
data_file = open['data_file.csv', 'w']
csv_writer = csv.writer[data_file]
count = 0
for cnt in stud_data:
if count == 0:
header = cnt.keys[]
csv_writer.writerow[header]
count += 1
csv_writer.writerow[cnt.values[]]
data_file.close[]
Giải trình
Đầu tiên, chúng tôi sẽ nhập các mô-đun json và csv. Tiếp theo, chúng tôi sẽ mở tệp JSON và tải dữ liệu của nó vào đối tượng 'dữ liệu'. Tiếp theo, chúng ta phải mở tệp CSV để ghi ở chế độ ghi. Chúng tôi đã gán biến đếm bằng 0. Sau đó, sử dụng vòng lặp for để lấy dữ liệu từ stud_data. Bây giờ, chỉ định cnt. keys[] trong tiêu đề. Cung cấp csv_writer. writerow[] và chuyển tiêu đề làm đối số. Khi bạn đếm các giá trị, bạn nên đóng data_file. đóng lại[]
Phương pháp 2. Sử dụng thư viện Pandas
Nó là một công cụ phân tích dữ liệu nguồn mở nhanh, linh hoạt, mạnh mẽ và dễ triển khai được phát triển trên ngôn ngữ Python. Đây là một thư viện phân tích và thao tác dữ liệu hoạt động tốt với các cuộc hội thoại và các tệp khác nhau như CSV, JSON, v.v. Ở đây, chúng tôi sẽ sử dụng phương thức to_scv[] để chuyển đổi tệp sang CSV
Chương trình
import pandas as pd
from pathlib import Path
import json
# absolute path to json file
jsonpath = Path['file.json']
# reading the json file
with jsonpath.open['r', encoding='utf-8'] as dat_f:
dat = json.loads[dat_f.read[]]
# creating the dataframe
df = pd.json_normalize[dat]
# converted a file to csv
df.to_csv['datafile.csv', encoding='utf-8', index=False]
Giải trình
Đầu tiên, chúng ta sẽ nhập thư viện pandas, đường dẫn và mô-đun json. Tìm nạp đường dẫn tệp json bằng hàm tạo Path[] và gán nó cho đối tượng jsonpath. Tiếp theo, bạn phải đọc tệp json và gán nó cho đối tượng 'dat'. Sau đó, tạo Dataframe bằng phương thức json_normalize[] và chuyển đối tượng 'dat' vào đó làm tham số. Cuối cùng, chuyển đổi df. to_csv[] để chuyển đổi đối tượng khung dữ liệu sang định dạng csv với tên tệp 'datafile. csv', có lược đồ mã hóa là UTF-8 và lập chỉ mục là Sai
Phần kết luận
Cả hai phương pháp này đều được sử dụng để chuyển đổi cấu trúc JSON thành tệp CSV. Nhưng sử dụng mô-đun CSV có lợi vì đây là mô-đun tích hợp và do đó nhẹ hơn so với thư viện Pandas. Ngoài ra, việc chuyển đổi khung dữ liệu mất nhiều thời gian hơn khiến nó trở nên phức tạp. Do đó, phương pháp đầu tiên nên được ưu tiên
Trong hướng dẫn này, trước tiên, chúng tôi sẽ chuyển đổi nhiều tệp JSON lồng nhau thành CSV bằng cách sử dụng các mô-đun sẵn có của Python có tên là json và csv bằng các bước sau, sau đó sử dụng Python Pandas. -
- Trước hết, chúng tôi sẽ đọc tệp JSON bằng mô-đun JSON
- Sau đó, chúng tôi sẽ tạo một danh sách dữ liệu mà chúng tôi muốn trích xuất từ từng tệp JSON
- Sau đó, chúng tôi sẽ ghi dữ liệu từ nhiều tệp JSON lồng nhau này vào tệp CSV bằng Mô-đun CSV
Bạn phải lưu ý rằng chúng tôi sẽ chuyển đổi nhiều tệp JSON lồng nhau thành tệp CSV
Chuyển đổi JSON sang CSV bằng các mô-đun sẵn có json và csv
Đọc trong tệp JSON
Vì vậy, tôi có một thư mục có tên là 'json_to_csv'. Thư mục này có một thư mục khác có tên là 'mô tả' trong đó, chứa nhiều tệp JSON lớn mà tôi cần phân tích cú pháp và chuyển đổi thành một CSV duy nhất. Chúng tôi sẽ sử dụng một mô-đun sẵn có gọi là mô-đun json
Đầu tiên, chúng tôi sẽ kiểm tra xem mỗi tệp JSON có gì. Tạo một cuộc gọi tệp Python 'json_to_csv. py’ trong thư mục cơ sở và viết đoạn mã sau. -
import json
from pprint import pprint
# we are using pprint for making the output more readable.
with open['descriptions/ISIC_0000000'] as f:
data = json.load[f]
pprint[data]
Dữ liệu đầu ra ở dạng với các phím. - ‘_id’, ‘_modelType’, ‘created’, ‘creator’, ‘dataset’, ‘meta’, ‘name’, ‘notes’, ‘updated’ và một số giá trị khác ở dạng JSON lồng nhau. Vì vậy, sử dụng hướng dẫn này, bạn có thể dễ dàng chuyển đổi tệp JSON lồng nhau thành tệp CSV. -
Chúng ta cần phân tích các cột sau từ tệp json lồng nhau này và chuyển đổi nó thành tệp csv. -
_id, _modelType, creator___id, creator__name, dataset___accessLevel, dataset___id, dataset__description, dataset__name, meta__acquisition__image_type, meta__acquisition__pixelsX, meta__acquisition__pixelsY, meta__clinical__age_approx, meta__clinical__benign_malignant, meta__clinical__diagnosis, meta__clinical__diagnosis_confirm_type, meta__clinical__melanocytic, meta__clinical__sex, meta__unstructured__diagnosis, meta__unstructured__race, name
Vì vậy, hãy tạo một 'đầu ra' trống. csv' và sao chép, dán dòng trên làm tiêu đề trong đó. -
$ nano output.csv
Chúng tôi sẽ biến nó thành một tập lệnh có thể sử dụng lại và do đó, chúng tôi sẽ không thực hiện bất kỳ mã hóa cứng nào cho nó. Chúng tôi sẽ sử dụng mô-đun os để duyệt qua các thư mục
Trước hết, chúng tôi sẽ lướt qua thư mục 'mô tả' và thêm tất cả các tệp [tên tệp] vào một danh sách. -
import os
import json
import csv
def get_list_of_json_files[]:
list_of_files = os.listdir['descriptions']
return list_of_files
Trích xuất dữ liệu mong muốn từ từng tệp JSON lồng nhau sang CSV
Bây giờ đối với mỗi tệp JSON lồng nhau, chúng tôi sẽ trích xuất dữ liệu của các cột có liên quan e. g. ‘_id’, ‘_modelType’. vân vân. và nối nó vào một danh sách mà sau này chúng tôi sẽ ghi vào một CSV. Chúng ta phải lưu ý rằng một số cột trong số này là khóa của JSON lồng nhau [từ điển cấp hai] như trong hình trên. Tạo chức năng sau. -
def create_list_from_json[jsonfile]:
with open[jsonfile] as f:
data = json.load[f]
data_list = [] # create an empty list
# append the items to the list in the same order.
data_list.append[data['_id']]
data_list.append[data['_modelType']]
data_list.append[data['creator']['_id']]
data_list.append[data['creator']['name']]
data_list.append[data['dataset']['_accessLevel']]
data_list.append[data['dataset']['_id']]
data_list.append[data['dataset']['description']]
data_list.append[data['dataset']['name']]
data_list.append[data['meta']['acquisition']['image_type']] #here we are reading in the nested JSON
data_list.append[data['meta']['acquisition']['pixelsX']]
data_list.append[data['meta']['acquisition']['pixelsY']]
data_list.append[data['meta']['clinical']['age_approx']]
data_list.append[data['meta']['clinical']['benign_malignant']]
data_list.append[data['meta']['clinical']['diagnosis']]
data_list.append[data['meta']['clinical']['diagnosis_confirm_type']]
data_list.append[data['meta']['clinical']['melanocytic']]
data_list.append[data['meta']['clinical']['sex']]
data_list.append[data['meta']['unstructured']['diagnosis']]
# In few json files, the race was not there so using KeyError exception to add '' at the place
try:
data_list.append[data['meta']['unstructured']['race']]
except KeyError:
data_list.append[""] # will add an empty string in case race is not there.
data_list.append[data['name']]
return data_list
Có một số điều cần lưu ý đối với đoạn mã trên. -
[i] Thứ tự của các cột phải được giữ chính xác như mong muốn ở đầu ra.
[ii] Đối với tệp JSON lồng nhau, bạn sẽ phải gọi tất cả các khóa [key1][key2][key3].
[iii] Khi xem xét kỹ lưỡng tệp json, tôi nhận thấy rằng có một số tệp không chứa '['meta']['unstructured']['race']' và do đó . Sử dụng KeyError Exception để cung cấp cho nó giá trị mong muốn trong kết quả. Tôi đã cho nó “” [một chuỗi trống] làm giá trị mặc định.
Ghi chú. - Chúng ta cũng có thể sử dụng. get [] để tránh các lỗi chính, cú pháp giống nhau là dữ liệu. lấy [khóa, giá_trị_mặc_định]
Bây giờ, nhiệm vụ cuối cùng. Chúng ta sẽ tạo một hàm write_csv[], hàm này sẽ mở 'đầu ra. csv’ ở chế độ chắp thêm, sau đó lặp qua nhiều tệp json lồng nhau này, tạo danh sách dữ liệu mong muốn rồi ghi vào tệp csv
Ghi dữ liệu từ nhiều tệp JSON vào tệp CSV
def write_csv[]:
list_of_files = get_list_of_json_files[]
for file in list_of_files:
row = create_list_from_json[f'descriptions/{file}'] # create the row to be added to csv for each file [json-file]
with open['output.csv', 'a'] as c:
writer = csv.writer[c]
writer.writerow[row]
c.close[]
Và cuối cùng, chạy kịch bản. -
if __name__=="__main__":
write_csv[]
Chúng tôi sẽ nhận được tệp CSV mong muốn trong tích tắc
Chuyển đổi JSON sang CSV bằng Pandas
Bạn có thể dễ dàng chuyển đổi tệp JSON phẳng sang CSV bằng mô-đun Python Pandas bằng các bước sau. -
1. Chúng tôi sẽ đọc tệp JSON bằng mô-đun json.
2. Làm phẳng tệp JSON bằng mô-đun json_normalize.
3. Chuyển đổi tệp JSON thành Pandas Dataframe.
4. Chuyển đổi Pandas Dataframe sang CSV, do đó chuyển đổi tệp JSON thành CSV.
Cài đặt gấu trúc
Như đã mô tả ở trên, chúng tôi sẽ sử dụng Pandas để chuyển đổi tệp JSON thành CSV, trước tiên chúng tôi sẽ cần cài đặt pandas. Nếu bạn chưa quen với Pandas, bạn có thể xem hướng dẫn cài đặt Pandas của chúng tôi
Đọc tệp JSON
Nói chung, các tệp JSON không ở định dạng đọc chúng trực tiếp vào Khung dữ liệu Pandas. Nói chung, một tệp có định dạng sau có thể được chuyển đổi trực tiếp thành khung dữ liệu gấu trúc. -
________số 8Nhưng một tệp JSON chung có định dạng sau. -
{
"fruit": "Apple",
"size": "Large",
"color": "Red"
}
Vì vậy, hãy đọc tệp JSON
import pandas as pd
from pathlib import Path
import json
# absolute path to json file
jsonpath = Path['file.json']
# reading the json file
with jsonpath.open['r', encoding='utf-8'] as dat_f:
dat = json.loads[dat_f.read[]]
# creating the dataframe
df = pd.json_normalize[dat]
# converted a file to csv
df.to_csv['datafile.csv', encoding='utf-8', index=False]
0Làm phẳng tệp JSON và chuyển đổi nó thành Pandas Dataframe
Chúng tôi sẽ sử dụng mô-đun json_normalize[] để làm phẳng tệp JSON và chuyển đổi nó thành Khung dữ liệu Pandas. Chúng ta hãy xem Pandas Dataframe
import pandas as pd
from pathlib import Path
import json
# absolute path to json file
jsonpath = Path['file.json']
# reading the json file
with jsonpath.open['r', encoding='utf-8'] as dat_f:
dat = json.loads[dat_f.read[]]
# creating the dataframe
df = pd.json_normalize[dat]
# converted a file to csv
df.to_csv['datafile.csv', encoding='utf-8', index=False]
1Chuyển đổi Pandas Dataframe thành tệp CSV, do đó chuyển đổi JSON thành CSV
Cuối cùng, chúng tôi sẽ chuyển đổi tệp JSON thành tệp CSV bằng Pandas. Khung dữ liệu. to_csv[] như bên dưới. -
$ nano output.csv
0Chúng tôi đã sử dụng chỉ mục = Sai vì khi chúng tôi chuyển đổi tệp JSON của mình thành Khung dữ liệu Pandas, Pandas sẽ tự động cung cấp cho nó chỉ mục mặc định. Bạn có thể biết thêm về Chỉ mục Pandas hoặc xem video của chúng tôi về Chỉ mục Pandas
Chuyển đổi tệp JSON lồng nhau sang CSV bằng Python Pandas
Bạn cũng có thể chuyển đổi tệp JSON lồng nhau thành CSV bằng phương thức json_normalize[] của Python Pandas. Hãy thử chuyển đổi tệp JSON được sử dụng trong ví dụ trên sang csv
$ nano output.csv
1Nếu bạn nhìn vào các cột, Python Pandas đã tự động làm phẳng JSON lồng nhau và Khung dữ liệu Pandas của chúng tôi chứa tất cả các giá trị cấp thấp nhất [ngay cả đối với các JSON lồng nhau]. Bây giờ chúng tôi sẽ loại bỏ các cột mà chúng tôi không cần sử dụng df. rơi vãi[]
$ nano output.csv
2Và cuối cùng, chúng ta sẽ chuyển đổi JSON lồng nhau sang CSV bằng gấu trúc. Khung dữ liệu. to_csv[]
$ nano output.csv
3Có thể tải xuống mã JSON TO CSV Python hoàn chỉnh từ GITHUB
Chúng tôi cần sự hỗ trợ của bạn để giữ cho máy chủ của chúng tôi hoạt động
Nếu bạn thích nội dung của chúng tôi và muốn giúp chúng tôi vận hành các máy chủ của mình, vui lòng đóng góp tại đây
Python एक वरह
ह ल में में एक त
तो, मेरे स ‘JSON_TO_CSV
Trong trường hợp này, bạn có thể json फ़ाइल में य् . py’ बनाएं और निम्नलिखित कोड लिखें. -
$ nano output.csv
4Dữ liệu xuất Python की dictionary के रूप में है जिसकी keys. - ‘_id’, ‘_modelType’, ‘created’, ‘creator’, ‘dataset’, ‘meta’, ‘name’, ‘notes’, ‘updated’ ओर कुछ giá trị आगे từ điển lồng nhau के रूप में है. -
हमें json फाइल से csv फाइल में निम्नलिखित कॉलम निकालनेनेनॗनेनेनेनेनॗनेनेनेनॗन।. -
_id,_modelType,creator___id,creator__name,dataset___accessLevel,dataset___id,dataset__description,dataset__name,meta__acquisition__image_type,meta__acquisition__pixelsX,meta__acquisition__pixelsY,meta__clinical__age_approx,meta__clinical__benign_malignant,meta__clinical__diagnosis,meta__clinical__diagnosis_confirm_type,meta__clinical__melanocytic,meta__clinical__sex,meta__unstructured__diagnosis,meta__unstructured__race,name
तो एक खाली 'đầu ra. CSV xông फ़. -
$ nano output.csv
क
सबसे पहले हम 'mô tả' में से सभी tệp [tên tệp] की एक python लिस्ट बना लेंगग. -
$ nano output.csv
6फिर हम ह ह एक एक एक में से हे . -
$ nano output.csv
7उपरोक त कोड ब ें ें तों तों. -
[i] Cột उसी क्रम में रखें जैसा के हमें xuất फ़ाइल में चाहित
[ii] Các từ điển lồng nhau में, आपको keys को [key1][key2][key3] ऐसे कोल करना होगा।
.
नोट. - हम. phương thức get[] का इस्तमाल lỗi chính . get[key,default_value] है।
Vì vậy, tôi xin lỗi. . CSV xông को