python实现将文件中的每一行文本记录,保存到MongoDB数据库,并防止重复插入

文本如下:

#日期 流水号 被浏览页面URL 第×页 访问者IP 访问时间 是否入口 操作系统 浏览器 语言 时区 屏幕分辨率 屏幕色彩位数 省份 城市 接入商 上网场所 是否安装ALEXA

2014-7-17  11452775496  http://www.imaibo.net/space/178120  1   59.41.23.101   2014-7-17 13:38:14   0   Windows XP Chrome 21.0.8
2014-7-17  11452775466  http://www.imaibo.net/space/24649  3  211.143.83.60  2014-7-17 13:38:13  0
2014-7-17  11452775362  http://www.imaibo.net/live/216945  4  119.130.98.225  2014-7-17 13:38:12  0
2014-7-17  11452775357  http://www.imaibo.net/space/170907  6  58.50.218.120  2014-7-17 13:38:12  0
2014-7-17  11452775291  http://www.imaibo.net/space/113374  1  14.158.204.146  2014-7-17 13:38:11  1  Windows XP Chrome 21.0.1180  zh-cn  8  1360×768  32  广东  广东省  电信  0 14 9

。。。

思路:

1.将每一个field对应的在BSON文档中的key先存储到一个列表中,如:

keyarray = ["date","swiftnum","url","page","ip","atime","is_inpoint","system","browser","locale","timezone",
"screen","colornum","province","city","aprovider","netcase","isalexa","ipheader","count","keyword","domain","incomeurl"]

2.从文件中读取文本数据,用for in循环遍历每一条文本记录,使用re模块的split方法,利用定义的pattern=r‘\t*’ 将每一行文本记录分解为的field组成的list

3.用一个for in循环对每一条记录的list遍历,将list中的值作为value,依次取出keyarray中的元素作为key,组成每一条文本记录对应的BSON文档,这样就实现了文本记录转换为BSON文档。

4.为了防止重复插入相同的记录,设计一个算法实现如下:

a.找到可以唯一标识每条记录的key-value,(本例:swiftnum)

b.在每次将每一条记录的BSON文档插入MongoDB中的同时,将对应的swiftnum的值写到一个文件swiftnums.txt中。

c.在每次插入记录BSON文档之前先做判断,是否要插入的BSON文档的swiftnum的值not in在swiftnums.txt中,若是的话,则插入,反之则跳过。

代码如下:

import os,glob
import re,pymongo
#-----连接MongoDB-----
conn = pymongo.Connection("localhost",27017)
db = conn.flowcounter
flowlist = db.flowcollection

#要存储的文本
file = open("test.txt","r")

#用于存储每一条记录的swiftnum值,以防止重复插入
swiftnums = open("swiftnums.txt","r+")

#每条记录转成BSON文档时,每个域对应的key
keyarray = ["date","swiftnum","url","page","ip","atime","is_inpoint","system","browser","locale","timezone",
"screen","colornum","province","city","aprovider","netcase","isalexa","ipheader","count","keyword","domain","incomeurl"]
#分解文本记录用到的正则
pattern = r‘\t*‘
#包含数据库中已有的记录的swiftnum的list
swiftnum_list = swiftnums.read().split(",")
for line in file.readlines()[1:]:
i = 0
data = {}
li_list = re.split(pattern,line) #分解记录为list
for field in li_list:
data[keyarray[i]]=field #将记录转为BSON文档
i +=1
if data[‘swiftnum‘] not in swiftnum_list: #判断是否重复
flowlist.insert(data)
swiftnums.write(data[‘swiftnum‘]+",") #记录已有记录
swiftnums.close()

python实现将文件中的每一行文本记录,保存到MongoDB数据库,并防止重复插入

时间: 2025-01-05 21:18:11

python实现将文件中的每一行文本记录,保存到MongoDB数据库,并防止重复插入的相关文章

python爬虫抓取51cto博客大牛的文章保存到MySQL数据库

脚本实现:获取51cto网站某大牛文章的url,并存储到数据库中. #!/usr/bin/env python #coding:utf-8 from  bs4  import  BeautifulSoup import urllib import re import MySQLdb k_art_name = [] v_art_url = [] db = MySQLdb.connect('192.168.115.5','blog','blog','blog') cursor = db.cursor

Vue 添加评论,node作后台保存到MongoDB数据库中

成品图 1.在 textarea 中 v-model 双向绑定要添加的数据,并且 button 中绑定方法 2.将from表单绑定的数据挂载到data上 3. methods 中实现方法,将评论内容以参数形式传进 4.node中调用数据库的create方法添加进数据库 原文地址:https://www.cnblogs.com/zhaohui-116/p/12271161.html

【Python】从文件中读取数据

从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 8979323846 2643383279 5028841971 file_reader.py with open("PI_DESC.txt") as file_object: contents = file_object.read() print(contents) 我们可以看出,读取

python操作txt文件中数据教程[1]-使用python读写txt文件

python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = './test/test.txt' contents = [] DNA_sequence = [] # 打开文本并将所有内容存入contents中 with open(filename, 'r') as f: for line in f.readlines(): contents.append(line

利用python 提取log 文件中的关键句子,并进行统计分析

利用python开发了一个提取sim.log 中的各个关键步骤中的时间并进行统计的程序: #!/usr/bin/python2.6 import re,datetime file_name='/home/alzhong/logs/qtat1/R2860.01.13/sim-applycommitrollback-bld1.log' file=open(file_name,'r') acnum=[];time_res=[];lnum=0 def trans_time(time): t1=datet

C# winform 实现删除文件中数据的一行

C#如何能删除文件中数据的一行 不说了直接上代码吧,简单粗暴 List<string> lines = new List<string>(File.ReadAllLines(@"C:\Users\lenovo\Desktop\删除文件一行.txt")); lines.Remove("34 11"); File.WriteAllLines(@"C:\Users\lenovo\Desktop\删除文件一行.txt", line

STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数

本文将介绍三个有趣的随机问题,分别是随机重新排列.从文件中随机取一行数据.生成N个随机数. 一.随机重新排列 将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失"公平".现在让我们来寻找如何保证每种序列被选择的概率一样大的算法. 首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}.很容易想到一种方法--只要第二个元素有50%的概率与第一个元素交换即可.用代码表现下: if (rand(

Python获取个人网站的所有课程下载链接和密码,并保存到Mongodb中

1.获取网站课程的分类地址: ''' 爬取屌丝首页,获取每个分类名称和链接 ''' import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36', } def get_class_data(): list_dat

Python scrapy爬虫数据保存到MySQL数据库

除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 job_inf 数据表: CREATE TABLE job inf ( id INT (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR (255), salary VARCHAR (255), company VARCHAR (255),