【发布时间】:2022-01-15 10:24:49
【问题描述】:
下面给出了将管道分隔的 csv 文件导入到 monogdb 的代码。
import csv
import json
from pymongo import MongoClient
url = "mongodb://localhost:27017"
client = MongoClient(url)
db = client.Office
customer = db.Customer
jsonArray = []
with open("Names.txt", "r") as csv_file:
csv_reader = csv.DictReader(csv_file, dialect='excel', delimiter='|', quoting=csv.QUOTE_NONE)
for row in csv_reader:
jsonArray.append(row)
jsonString = json.dumps(jsonArray, indent=1, separators=(",", ":"))
jsonfile = json.loads(jsonString)
customer.insert_many(jsonfile)
以下是我在运行上述代码时遇到的错误。
Traceback (most recent call last):
File "E:\Anaconda Projects\Mongo Projects\Office Tool\csvtojson.py", line 16, in <module>
jsonString = json.dumps(jsonArray, indent=1, separators=(",", ":"))
File "C:\Users\Predator\anaconda3\lib\json\__init__.py", line 234, in dumps
return cls(
File "C:\Users\Predator\anaconda3\lib\json\encoder.py", line 201, in encode
chunks = list(chunks)
MemoryError
如果在 for 循环下用一些缩进修改代码。 MongoDB 会再次导入相同的数据,而不会停止。
import csv
import json
from pymongo import MongoClient
url = "mongodb://localhost:27017"
client = MongoClient(url)
db = client.Office
customer = db.Customer
jsonArray = []
with open("Names.txt", "r") as csv_file:
csv_reader = csv.DictReader(csv_file, dialect='excel', delimiter='|', quoting=csv.QUOTE_NONE)
for row in csv_reader:
jsonArray.append(row)
jsonString = json.dumps(jsonArray, indent=1, separators=(",", ":"))
jsonfile = json.loads(jsonString)
customer.insert_many(jsonfile)
【问题讨论】:
-
使用mongoimport 可能是更好的选择。注意,
mongoimport也接受来自 STDIN 的输入,您可以在 python 中转换行然后打印到 STDIN 而不是编写单独的文件。 -
我不懂python但可能像
if (row % 1000 == 0) customer.insert_many(jsonfile)这样插入,即1000个批量插入文档 -
@Wernfried Domscheit 这是结果` Traceback(最近一次调用最后一次):文件“E:\Anaconda Projects\Mongo Projects\SDR Tool\csvtojson.py”,第 18 行,在
if row % 1000 == 0: TypeError: unsupported operand type(s) for %: 'dict' and 'int' ` -
您能否添加一个文件格式的小样本 - 仅 3 或 4 行
-
^^ 加上一个标题行(如果有的话)
标签: python json pandas mongodb csv