最近在学习python, 为了避免学了、找了资料结果转头就忘记的情形出现,所以还是做点笔记 记录一下。
python中json处理, 使用json 模块
- json.dumps() 将dict类型的数据转成str :
import json
dict_ = { 'key': 'value'}
json.dumps(dict_, encoding="UTF-8", ensure_ascii=False)
- json.loads() 将str类型的数据转成dict
str_ = '{ 'key': 'value'}'
json.loads(str_)
- json.dump() 将dict类型的数据转成str,并写入到json文件
def save_file(filename, data):
with open(fielname,"w") as f:
json.dump(data, f, encoding="UTF-8", ensure_ascii=False)
读写csv文件, 使用csv模块
写csv文件 :
open(文件名 , 打开模式)函数打开一个文件
文本打开模式有:
- r->只读;
- w->只写;
- w+ ->读写,文件存在打开文件,并从开头开始编辑,原有内容会被删除。文件不存在,创建新文件;
- a+ ->读写, 文件已存在,文件指针将放在文件的结尾, 文件打开时是追加模式。文件不存在, 创建文件;
import csv
header = ['header1', 'header2']
def write_csv(filename, data):
with open(filename, 'w') as f:
writer = csv.DictWriter(f, header)
writer.writeheader() # csv文件写 header
# data 是 list
if type(data).__name__ == 'list': # 判断data 类型
for i in data:
writer.writerow(i)
else: # data不为list
writer.writerow(data)
def write_csv_a(filename, data): # 追加形式写文件
with open(filename, 'a+') as f:
writer = csv.DictWriter(f, header)
for i in data:
writer.writerow(i)
读取csv文件内容到另一个csv文件时希望csv文件 header 不被读取, 即读取文件内容是忽略第一行。使用 itertools 模块
from itertools import islice
def read_file(filename, data):
with open(filename, 'r') as f:
reader = csv.reader(f)
for i in islice(reader, 1, None):
pass
def read_line(filename, data):
with open(filename, 'b') as f:
read = f.readlines()
for i in read:
i = i.strip("\n") # 去掉每行数据的换行符
pass
python 连接 Mongodb
使用pymongo模块, 数据库结果打印使用jsonb模块(使用与json类似)
import pymongo
import jsonb
def connect_db():
uri = 'mongodb://' + 数据库账户名 + ':' + 密码 + '@' + host + ':' + port
myclient = pymongo.MongoClient(uri)
mydb = myclient[数据库名称]
mycol = mydb[数据表]
return mycol
# 查找结果并存储为csv 文件
def find_db():
col = connect_db()
x = col.find({})
# col.find({'time': {"$regex": '2018-10-15'}}) 使用正则查询
# col.find({'time': {'$exists': 0}}) 查找time 字段不存在的结果
# 打印结果
print jsonb.dumps(x, encoding="UTF-8", ensure_ascii=False)
data = jsonb.loads(jsonb.dumps(x))
write_csv(filename, data)