#!/usr/bin/env python3

import pymongo
import datetime
import os yesterday = str(datetime.date.today() - datetime.timedelta(days=1)) def mongo2csv(db_name, ts_string=yesterday, column_handle=None, column_delete=None):
''' :param db_name: 表名
:param ts_string: 日期
:param column_handle: 需要处理的列,
格式{k:v} ,
k:需要处理的列,
v:1.数字,即列表索引,取列表的第几个元素
2.字符串,即字典key,取子字典的某个value
3.join ,即需要将列表转为字符串 :param column_delete: 需要删除的列
:return:
'''
print('starting...')
host = '127.0.0.1'
port = 5600
user = 'root'
password = ''
url = 'mongodb://' + user + ':' + password + '@' + host + ':' + str(port) + '/'
client = pymongo.MongoClient(url)
db = client.rental
collection = db[db_name]
select_condition = {'_id': 0, 'ts': 0}
if not column_delete:
column_delete = []
if not column_handle:
column_handle = {}
if len(column_delete) > 0:
for temp in column_delete:
select_condition[temp] = 0
title_dic = collection.find_one({'ts_string': ts_string}, select_condition)
title = sorted(title_dic.keys())
con = collection.find({'ts_string': ts_string}, select_condition)
file_name = db_name + '_' + yesterday + '.csv'
with open(file_name, 'a', encoding='utf8') as f:
f.write(','.join(title) + '\n')
for item in con:
for k, v in column_handle.items():
item[k] = item[k][v] if v != 'join' else (
'|'.join([str(x) for x in item[k]]) if isinstance(item[k], list) else item[k])
f.write(','.join([str(item[x]) for x in title]) + '\n') if __name__ == '__main__':
mongo2csv('lianjia_detail')
mongo2csv('mogu_detail', column_handle={'metroInfo': 0, 'rentType': 'value'})
mongo2csv('qingke_detail', column_handle={})
mongo2csv('xiangyu_detail', column_delete=['endDate','vacantStartDate','tabList','vacantEndDate'])
mongo2csv('ziru_detail', column_handle={'subway_line_code': 'join', 'subway_station_code': 'join'})
print(os.system('wc -l *.csv'))

mongo2csv的更多相关文章

随机推荐

  1. Eclipse maven hadoop -- java.io.IOException: No FileSystem for scheme: hdfs

    2019-01-10 概述 今天在Windows系统下新安装了Eclipse和maven的环境,想利用Maven构建一个Hadoop程序的,结果却发现程序运行时一直报 “No FileSystem f ...

  2. saltstack之自动化运维

    引入 简介 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这 ...

  3. PEP8中文翻译(转)

    原文:https://github.com/zgia/manual PEP 8 -- Style Guide for Python Code PEP Index > PEP 8 -- Style ...

  4. apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO

    可以将 ElasticSearchIO.java 源码拷贝至自己的项目.改名为MyElasticSearchIO.java.自己定制实现.这时编译会遇到auto.value失败.在pom.xml中加入 ...

  5. JMeter 不同线程组间变量传递

    JMeter元件都是有作用域的,而变量大多使用正则表达式提取器,要想在不通过线程组件使用变量参数,则需要设置全部变量 JMeter函数助手就提供了一个函数用于设置全局变量属性,实现的功能类似于在用户自 ...

  6. 2019南昌邀请赛网络预选赛 I. Max answer(单调栈+暴力??)

    传送门 题意: 给你你一序列 a,共 n 个元素,求最大的F(l,r): F(l,r) = (a[l]+a[l+1]+.....+a[r])*min(l,r); ([l,r]的区间和*区间最小值,F( ...

  7. Vue基础之es6

    什么是ECMAScript,以及es6的诞生? 1997年 ECMAScript 1.0 诞生 1999年12月 ECMAScript 3.0诞生,它 是一个巨大的成功,在业界得到了广泛的支持,它奠定 ...

  8. 基于USB网卡适配器劫持DHCP Server嗅探Windows NTLM Hash密码

    catalogue . DHCP.WPAD工作过程 . python Responder . USB host/client adapter(USB Armory): 包含DHCP Server . ...

  9. Python 文件行数读取的三种方法

    Python三种文件行数读取的方法: #文件比较小 count = len(open(r"d:\lines_test.txt",'rU').readlines()) print c ...

  10. 【转】Reflector、reflexil、De4Dot、IL相关操作指令合集

    PS:CTRL+F 输入你需要的内容,可以快速查找页面上的内容. 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. ...