Python nhập từ điển từ một tệp khác

Jeff Noble, một nhà khảo cổ học hàng hải, đã thành lập một nhóm để tìm kiếm các vụ đắm tàu ​​mỗi tháng. Tháng này, họ sẽ tìm kiếm Xác tàu đắm Edmund Fitzgerald. một tàu chở hàng Great Lakes bị mất năm 1975. Các chi tiết về vụ đắm tàu ​​này đã được cung cấp cho anh ta ở các định dạng sau

  • Tệp văn bản
  • Tệp JSON
  • tập tin dưa chua

Jeff muốn bạn viết một tập lệnh đọc một trong các loại tệp trên và xuất ra thiết bị đầu cuối theo cột

Nội dung tệp (được lưu dưới dạng ef.txt, ef.jsonef.pickle)

{"Name": "SS Edmund Fitzgerald", "Nickname": "Titanic of the Great Lakes", "Ordered": "bruary 1, 1957", "Owner": "Northwest Mutual",
"Captain": "Ernest M. McSorley", "Type": "Great Lakes Freighter", "Cargo": "Iron Ore", "Length": "729 ft", "Depth": "39 ft.",
"Tonnage": "13,632 GRT", "Identification": "US 277437", "Port of Registry": "Milwaukee, Wisconsin", "Launched": "June 7, 1958",
"Laid to Rest": "Lake Superior", "Date Lost": "November 10, 1975", "Longitutde": 47.08646867739879, "Latitude": -85.11840679061183}

💬 câu hỏi. Làm cách nào để chúng tôi đọc trong tệp Từ điển và xác định phương pháp tốt nhất?

Chúng ta có thể hoàn thành nhiệm vụ này bằng một trong các tùy chọn sau

  • Phương pháp 1. Sử dụng
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    0 để đọc trong tệp văn bản
  • Phương pháp 2. Sử dụng
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    1để đọc trong tệp JSON
  • Phương pháp 3. Sử dụng
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    2 để đọc trong tệp dưa chua
  • Phương pháp 4. Sử dụng
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    3 để đọc một DataFrame

Trước khi bất kỳ thao tác dữ liệu nào có thể xảy ra, một (1) thư viện mới sẽ yêu cầu cài đặt

  • Thư viện Pandas cho phép truy cập vào/từ DataFrame

Để cài đặt thư viện này, hãy điều hướng đến một thiết bị đầu cuối IDE. Tại dấu nhắc lệnh (

import pandas
from pandas import json_normalize
import ast
import json
import pickle
4), hãy thực thi mã bên dưới. Đối với thiết bị đầu cuối được sử dụng trong ví dụ này, dấu nhắc lệnh là ký hiệu đô la (
import pandas
from pandas import json_normalize
import ast
import json
import pickle
4). Lời nhắc thiết bị đầu cuối của bạn có thể khác

$ pip install pandas

Nhấn phím

import pandas
from pandas import json_normalize
import ast
import json
import pickle
6 trên bàn phím để bắt đầu quá trình cài đặt

Nếu quá trình cài đặt thành công, một thông báo sẽ hiển thị trong thiết bị đầu cuối cho biết điều tương tự


Vui lòng xem hướng dẫn cài đặt PyCharm để biết các thư viện cần thiết

  • Cách cài đặt Pandas trên PyCharm

Thêm đoạn mã sau vào đầu mỗi đoạn mã. Đoạn mã này sẽ cho phép mã trong bài viết này chạy không có lỗi

import pandas
from pandas import json_normalize
import ast
import json
import pickle

💡 Lưu ý. Các thư viện bổ sung được chỉ ra ở trên không yêu cầu cài đặt vì chúng được tích hợp sẵn vào Python


Phương pháp 1. sử dụng ast. literal_eval()

Hàm

import pandas
from pandas import json_normalize
import ast
import json
import pickle
7 đọc và phân tích cú pháp một chuỗi từ vùng chứa Python, chẳng hạn như Từ điển

with open('ef.txt', 'r') as fp:
    data  = fp.read()
    details = ast.literal_eval(data)

for key, value in details.items():
    print ("{:<20} {:<10} ".format(key, value))
  • Tệp văn bản hiện có được mở và đối tượng con trỏ tệp
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    8 được tạo
    • Nội dung của tệp được đọc vào
      import pandas
      from pandas import json_normalize
      import ast
      import json
      import pickle
      9
    • Sau đó,
      import pandas
      from pandas import json_normalize
      import ast
      import json
      import pickle
      7 đọc biến
      import pandas
      from pandas import json_normalize
      import ast
      import json
      import pickle
      9 và lưu vào
      with open('ef.txt', 'r') as fp:
          data  = fp.read()
          details = ast.literal_eval(data)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      2
  • Vòng lặp
    with open('ef.txt', 'r') as fp:
        data  = fp.read()
        details = ast.literal_eval(data)
    
    for key, value in details.items():
        print ("{:<20} {:<10} ".format(key, value))
    3 điều hướng qua các khóa và giá trị từ điển
    • Mỗi vòng lặp định dạng đầu ra thành các cột và xuất ra thiết bị đầu cuối

💡 Lưu ý. Trước đây, có ý kiến ​​cho rằng chức năng này gây ra rủi ro bảo mật. Tuy nhiên, vì mã này chỉ phân tích cú pháp, nó không phải là vấn đề đáng lo ngại

Đầu ra (đoạn trích)

NameSS Edmund Fitzgerald Biệt danhTitanic of the Great LakesĐặt hàng ngày 1 tháng 2 năm 1957Chủ sở hữu Northwest Mutual Thuyền trưởngErnest M. McSorleyTypeGreat Lakes FreighterHàng hóa Quặng sắt

Phương pháp 2. Sử dụng JSON

Cấu trúc tệp JSON dựa trên khóa. cặp giá trị. giống như một Từ điển Python. Định dạng này thường được sử dụng để truyền dữ liệu và được ưa chuộng vì khả năng đọc được bằng nhiều ngôn ngữ mã hóa. Chi phí thấp của nó mang lại cho tùy chọn này những ngón tay cái lên

with open('ef.json', 'r') as fp:
    details = json.load(fp)

for key, value in details.items():
    print ("{:<20} {:<10} ".format(key, value))
  • Tệp JSON hiện có được mở và một đối tượng con trỏ tệp
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    8 được tạo
    • Nội dung của tệp được đọc bằng cách sử dụng
      with open('ef.txt', 'r') as fp:
          data  = fp.read()
          details = ast.literal_eval(data)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      5 và được lưu vào
      with open('ef.txt', 'r') as fp:
          data  = fp.read()
          details = ast.literal_eval(data)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      2
  • Vòng lặp For điều hướng qua các khóa và giá trị Từ điển
    • Mỗi vòng lặp định dạng đầu ra thành các cột và xuất ra thiết bị đầu cuối

Làm cách nào để đọc tệp JSON bằng Python?

Python nhập từ điển từ một tệp khác

Xem video này trên YouTube

Đầu ra (đoạn trích)

NameSS Edmund Fitzgerald Biệt danhTitanic of the Great LakesĐặt hàng ngày 1 tháng 2 năm 1957Chủ sở hữu Northwest Mutual Thuyền trưởngErnest M. McSorleyTypeGreat Lakes FreighterHàng hóa Quặng sắt

Phương pháp 3. sử dụng dưa chua

Một nơi tốt để sử dụng tệp Pickle là khi bạn có dữ liệu nhạy cảm hoặc khi bạn cần giữ trạng thái chương trình trong các phiên. Dữ liệu được tuần tự hóa và lưu trữ dưới dạng tệp nhị phân

with open('ef.pickle', 'rb') as fp:
    details = pickle.load(fp)

for key, value in details.items():
    print ("{:<20} {:<10} ".format(key, value))
  • Tệp Pickle hiện có được mở và một đối tượng con trỏ tệp
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    8 được tạo
    • Nội dung của tệp được đọc bằng cách sử dụng
      import pandas
      from pandas import json_normalize
      import ast
      import json
      import pickle
      2 và được lưu vào
      with open('ef.txt', 'r') as fp:
          data  = fp.read()
          details = ast.literal_eval(data)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      2
  • Vòng lặp For điều hướng qua các khóa và giá trị Từ điển
    • Mỗi vòng lặp định dạng đầu ra thành các cột và xuất ra thiết bị đầu cuối

Đầu ra (đoạn trích)

NameSS Edmund Fitzgerald Biệt danhTitanic of the Great LakesĐặt hàng ngày 1 tháng 2 năm 1957Chủ sở hữu Northwest Mutual Thuyền trưởngErnest M. McSorleyTypeGreat Lakes FreighterHàng hóa Quặng sắt

Phương pháp 4. Đọc một DataFrame

Nếu bạn thích làm việc với DataFrames, thì việc chuyển đổi tệp thành DataFrame có thể là lý tưởng. Theo mặc định, không cần định dạng bổ sung, đầu ra được đặt thành hiển thị ở định dạng cột

with open('ef.json', 'rb') as fp:
    details = fp.read()
    df = json_normalize(json.loads(details)).T
print(df)
  • Tệp JSON hiện có được mở và một đối tượng con trỏ tệp
    import pandas
    from pandas import json_normalize
    import ast
    import json
    import pickle
    8 được tạo
    • Nội dung tệp được đọc và lưu vào
      with open('ef.txt', 'r') as fp:
          data  = fp.read()
          details = ast.literal_eval(data)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      2
    • Hàm
      import pandas
      from pandas import json_normalize
      import ast
      import json
      import pickle
      3 chuyển chi tiết và lưu vào
      with open('ef.json', 'r') as fp:
          details = json.load(fp)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      3
    • Dữ liệu được chuẩn hóa và chuyển đổi thành DataFrame (
      with open('ef.json', 'r') as fp:
          details = json.load(fp)
      
      for key, value in details.items():
          print ("{:<20} {:<10} ".format(key, value))
      4) theo hướng dọc
  • Đầu ra được gửi đến thiết bị đầu cuối

Đầu ra (đoạn trích)

NameSS Edmund Fitzgerald Biệt danhTitanic of the Great LakesĐặt hàng ngày 1 tháng 2 năm 1957Chủ sở hữu Northwest Mutual Thuyền trưởngErnest M. McSorleyTypeGreat Lakes FreighterHàng hóa Quặng sắt

Bản tóm tắt

Chúng tôi đã chọn Phương pháp 2 (JSON) là tùy chọn tốt nhất khi xem xét các phương pháp trên. JSON nhanh hơn vì nó cần ít byte hơn để truyền và ít thời gian xử lý hơn

Làm cách nào để tải từ điển từ tệp Python?

Chúng tôi có thể đọc từ điển từ một tệp theo 3 cách. .
Sử dụng json. phương thức tải (). Chuyển đổi chuỗi từ điển hợp lệ thành dạng json
sử dụng ast. phương thức literal_eval(). Hàm an toàn hơn hàm eval và cũng có thể được sử dụng để chuyển đổi xen kẽ tất cả các loại dữ liệu ngoài từ điển
Sử dụng dưa chua

Tôi có thể nhập một biến từ một tệp Python khác không?

Nhập các biến từ một tệp khác trong cùng một thư mục

Làm cách nào để chuyển đổi dữ liệu tệp văn bản thành từ điển trong Python?

1) Sử dụng json. tải() . Trước khi sử dụng phương pháp này, bạn phải nhập thư viện json trong python bằng từ khóa “nhập”.

Làm cách nào bạn có thể nhập tất cả các hàm từ tệp Python trong từ điển trước đó?

importlib cho phép bạn nhập bất kỳ mô-đun Python nào từ tên chuỗi . Bạn có thể tự động hóa nó bằng cách xem qua danh sách các tệp trong đường dẫn. Sử dụng Pythonic hơn __all__. Kiểm tra ở đây để biết thêm chi tiết.