(Python)文本数据导入MongoDB

前言

本篇文章简单介绍使用Python将文本数据导入MongoDB。
流程简示:

环境检查
未配置
配置相关环境
连接MongoDB
已配置
数据准备
pandas处理数据
转为字典列表
导入数据库

代码简介

配置相关环境

Python3.6.8

pip install pymongo

安装pymongo包

pip install pandas

安装pandas包

pip install re

安装re包
正则表达式处理字符串,自定义命名集合名,可忽略该安装包。

连接MongoDB

host = ***		#ip
port = 27017  	#默认端口
dbName = ***	#数据库名
user = root		#用户名
password = ***	#密码
MClient = MC(host=host, port=port)	#连接MongoDB
db = MClient[dbName]	#指定数据库,等同于 use dbName 
# db.authenticate(user,password)	#用户验证,无 用户密码可忽略此操作

数据准备

#需要导入MongoDB的文件名
fileName = "filename.txt"
#文件所在路径
filePath = r'D:\data\\' + fileName 
#集合命名
collection = re.sub('.txt', '', fileName)
#列名(字段名)
columns = ["key1", "key2", "key3"]

filePath = r'D:\data\\' + fileName :拼接字符串,即拼接处完成路径地址;
re.sub('.txt', '', fileName) 正则表达式去除后缀 .txt,可直接给集合命名(collection=collectionName),省略此操作;
columns = [] 列名列表,即对应的字段名。

pandas处理数据

#展示所有列数据
pd.set_option('display.max_columns', None)
#pandas读取文件数据
data_txt = pd.read_table(filePath,header=None, names=columns, sep='\!\^', usercols = [i for i in range(start,end)], engine="python", encoding="utf-8")
#转化为dataframe(二维)
data_txt_df = pd.DataFrame(data_txt)
print(data_txt_df)

pd.set_option('display.max_columns', None)
pandas展示数据时,当列数过多时,会隐藏中间部分列,此操作可全部展示。

pd.read_table()
参数介绍:
filepath :文件路径;
header=None : 默认会自动推断数据文件列名,如果设置为None则无文件列名,为1则第一行是文件列名;
names=columns :设置列名;
sep='\!\^' :设置拆分符;
usercols=[i for i in range(start,end)] :设置需要从文件读出的列,默认全部读出;
engine="python" :默认是c引擎解析,如果使用python引擎,可以解析更丰富的内容,当数据较多时,c引擎解析速度比python快很多;
encoding="utf-8":设置解码格式,防止中文乱码。

注解:
usercols=[i for i in range(start,end)]: 列表生成式,假设start=1,end=5,结果等同于[1,2,3,4] (迭代)。
也可替换为不连续列表,如:usercols=[2,5,6]

转为字典列表

#转化为字典列表
data_list = []
for i, row in data_txt_df:
	d = {key:row[key] for key in columns}
	data_list.append(d)

i :行号,此处未用。
row :可理解为键值列表,row[key] 表示取值。
{key:row[key] for key in columns} :字典生成式,同上述列表生成式。

导入数据库

# 导入数据前清空之前数据(全量导入)
db[collection].drop()
# 数据导入
db[collection].insert_many(data_list)

db[collection]. 后跟任意MongoDB操作。

Python完整代码

from pymongo import MongoClient as MC
import pandas as pd
import re

host = ***		#ip
port = 27017  	#默认端口
dbName = ***	#数据库名
user = root		#用户名
password = ***	#密码
MClient = MC(host=host, port=port)	#连接MongoDB
db = MClient[dbName]	#指定数据库,等同于 use dbName 
# db.authenticate(user,password)	#用户验证,无用户密码可忽略此操作

#需要导入MongoDB的文件名
fileName = "filename.txt"
#文件所在路径
filePath = r'D:\data\\' + fileName 
#集合命名
collection = re.sub('.txt', '', fileName)
#列名(字段名)
columns = ["key1", "key2", "key3"]

#展示所有列数据
pd.set_option('display.max_columns', None)
#pandas读取文件数据
data_txt = pd.read_table(filePath,header=None, names=columns, sep='\!\^', usercols = [i for i in range(start,end)], engine="python", encoding="utf-8")
#转化为dataframe(二维)
data_txt_df = pd.DataFrame(data_txt)
print(data_txt_df)

#转化为字典列表
data_list = []
for i, row in data_txt_df:
	d = {key:row[key] for key in columns}
	data_list.append(d)
	
# 导入数据前清空之前数据(全量导入)
db[collection].drop()
# 数据导入
db[collection].insert_many(data_list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值