Tôi cần chuyển dữ liệu từ tệp Excel sang bảng MongoDB thông qua mã Python. Tệp Excel của tôi trông như thế:
Alex | 12 | môn Toán | Vật lý | Sinh học |
MAG | 67 | Hoá học | Lịch sử |
Đầu ra MongoDB sẽ trông như thế:
--1 Đối tượng--: Tên: Alex Age: 12 môn học: Toán, Vật lý, Sinh học
Name: Alex
Age: 12
Subjects: Math, Physics, Biology
--2 Đối tượng--: Tên: Mag Age: 67 Chủ đề: Hóa học, Lịch sử
Name: Mag
Age: 67
Subjects: Chemistry, History
Tôi đã viết mã như thế này:
import csv import pymongo import pandas as pd read_file = pd.read_excel("T1.xls") read_file.to_csv("Test.csv", index=None, header=True) df = pd.DataFrame(pd.read_csv("Test.csv")) connection = pymongo.MongoClient('127.0.0.1:27017') db = connection.test collection = db.table1 table = open('Test.csv', 'r') reader = csv.DictReader(table) collection.drop() header = df.head() for each in reader: row = {} for field in header: row[field] = each[field] collection.insert_one(row)Tuy nhiên, tôi có 2 vấn đề với nó:
- Bước với tệp .xslx chuyển đổi thành .csv là không cần thiết
- Kết quả là, tôi có thêm 2 cột không mong muốn như không tên: 3, không tên: 4 với tên của các đối tượng khác, nói cách khác, mã này phân tách các đối tượng trong một cột, vì trong tệp excel của tôi, tôi có 'chủ đề' như các tế bào thống nhất
Có ai có thể giúp tôi với những điểm này?
Nhập tệp Excel vào MongoDB
MongoDB không hỗ trợ nhập trực tiếp các tệp Excel, vì vậy để làm điều đó, chúng tôi sẽ sử dụng một chức năng tích hợp vào Excel.
Sẵn sàng
Tiện ích mongoimport chỉ hỗ trợ các tệp JSON, CSV và TSV. Do đó, để lấy dữ liệu của bạn từ Excel vào MongoDB, tùy chọn tốt nhất là lưu nó dưới dạng tệp CSV và sau đó sử dụng mongoimport để nhập nó.
Làm thế nào để làm nó…
Trong Excel:
- Chuyển đến menu tệp.File menu.
- Chọn Lưu dưới dạng.Save As.
- Lưu tệp ở định dạng giá trị phân tách dấu phẩy (CSV).Comma Separated Values (CSV) format.
Sau khi bạn thực hiện các bước trước, bạn có thể sử dụng công thức trước đó để nhập tệp.
Nếu bạn nghĩ rằng điều đó quá dễ dàng, bạn có thể nhập tệp excel vào khung dữ liệu gấu trúc bằng cách sử dụng read_excel, hãy viết toàn bộ DataFrame vào tệp CSV bằng cách sử dụng to_csv, sau đó nhập nó bằng cách sử dụng ...
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
#!/usr/bin/env Python | |
Nhập khẩu sys | |
ImpridPandasaspd pandas as pd | |
Impilpymongo pymongo | |
Nhập khẩu json | |
demimport_content (filepath): import_content(filepath): | |
mng_client = pymongo.mongoclient ('localhost', 27017) = pymongo.MongoClient('localhost', 27017) | |
mng_db = mng_client ['MongoDB_name'] // RepracemongOdbName = mng_client['mongodb_name'] // Replace mongo db name | |
collection_name='collection_name'//Replacemongodbcollectionname = 'collection_name' // Replace mongo db collection name | |
DB_CM = MNG_DB [Collection_Name] = mng_db[collection_name] | |
CDIR = OS.Path.Dirname (__ File__) = os.path.dirname(__file__) | |
file_res = os.path.join (CDIR, FilePath) = os.path.join(cdir, filepath) | |
data = pd.read_csv (file_res) = pd.read_csv(file_res) | |
data_json = json.loads (data.to_json (Orient = 'Records'))) = json.loads(data.to_json(orient='records')) | |
db_cm.remove ().remove() | |
db_cm.insert (data_json).insert(data_json) | |
if__name __ == "__ main__": __name__ == "__main__": | |
filepath='/path/to/csv/path'//passcsvfilepath = '/path/to/csv/path' // pass csv file path | |
Nhập khẩu_content (FilePath)(filepath) |