python 从文件导入分类
# -*- coding:utf-8 -*-
"""
从文件导入分类 根据行首制表符或空格确定层级关系(4个空格等于一个制表符 同一行制表符和空格不能混用 )
必须是 utf-8编码 -------test.txt-------
鞋子
运动鞋
凉鞋
拖鞋
靴子
体育
羽毛球
单打
双打
游泳
----------------------
""" import redis
import MySQLdb
import json class Category(object): cache = redis.StrictRedis(host='localhost',port = 6379,db=0)
conn = MySQLdb.Connect(host='192.168.1.222', user='root', passwd='', db='gmian',charset='utf8') """
打开文件 读取每一行进行处理
"""
def run(self,category_file):
f = open(category_file,'r')
while True:
#print isinstance(line, unicode) # 检测是否为unicode
#print unicode(line,"utf-8")
line = f.readline()
if line:
self.writeCate(line)
else:
break
f.close() #删除缓存
def __del__(self):
keys = self.__class__.cache.smembers('category_keys')
for key in keys:
self.__class__.cache.delete(key)
self.__class__.cache.delete('category_cateid')
self.__class__.cache.delete('category_keys') #获取自动增长的ID
@classmethod
def getincr(cls):
return int(cls.cache.incr('category_cateid')) + DB_AUTO_INSERT # 把分类添加进按层级分别的列表中
@classmethod
def add(cls,num,catename):
id = cls.getincr()
cls.insert_db(id,num,catename)
cls.cache.sadd('category_keys','category_level_'+str(num))
cls.cache.lpush('category_level_'+str(num),json.dumps([id,catename])) #获取父类
@classmethod
def getparentid(cls,num):
parent = cls.cache.lindex('category_level_'+str(num-1),0)
if not parent:
raise NameError('STOP !! 没找到父类')
parent = json.loads(parent)
return parent[0] @classmethod
def writeCate(cls,line):
num,catename = cls.getLevelNum(line)
cls.add(num,catename) @classmethod
def insert_db(cls,id,num,catename):
if num:
pid = cls.getparentid(num)
else:
pid = 0
cursor = cls.conn.cursor()
cursor.execute("insert into gm_category (cat_id,cat_name,parent_id,style,is_top_style,is_top_show,cat_ico)value(%s,%s,%s,%s,%s,%s,%s)" , (id,catename,pid,'',0,0,''))
cls.conn.commit() # 要么全部是 \t 要么全部是空格 空格4个为一个单位
@staticmethod
def getLevelNum(str):
i = 0
while str[i] == '\t':
i+=1
if i:
return i,str[i:]
while str[i] == ' ':
i+=1
if not i:
return 0,str
return i/4,str[i:] if __name__ == '__main__':
# >$ python category.py 153(DB_AUTO_INSERT) cate1.txt cate2.txt ... import sys
try:
DB_AUTO_INSERT = int(sys.argv[1]) # 已存在的最大ID 否则ID重复 插入失败
files = sys.argv[2:]
if not files:
raise IndexError('input category file')
except IndexError as e:
raise ValueError('---------argv errors-------')
cate = Category()
for file in files:
try:
cate.run(file)
except Exception as e:
print e
print u"【" +file+ u"】导入失败"
python 从文件导入分类的更多相关文章
- 关于python中文件导入的若干问题
__init__文件 同一级目录下直接import导入就可以了,如果是在不同的目录下面被导入文件的文件夹下面必须有__init__.py文件,即使这个文件是空的也可以.当然这个文件也可以初始一些数据 ...
- python将文件导入字典
a={}i=0f = open("filepath","r")for line in f.readlines(): a[i] =line i=i+1 a是字典, ...
- appium+python自动化51-adb文件导入和导出(pull push)
前言 用手机连电脑的时候,有时候需要把手机(模拟器)上的文件导出到电脑上,或者把电脑的图片导入手机里做测试用,我们可以用第三方的软件管理工具直接复制粘贴,也可以直接通过adb命令导入和导出. adb ...
- appium+python自动化-adb文件导入和导出(pull push)
前言 用手机连电脑的时候,有时候需要把手机(模拟器)上的文件导出到电脑上,或者把电脑的图片导入手机里做测试用,我们可以用第三方的软件管理工具直接复制粘贴,也可以直接通过adb命令导入和导出. adb ...
- Python实现鸢尾花数据集分类问题——基于skearn的NaiveBayes
Python实现鸢尾花数据集分类问题——基于skearn的NaiveBayes 代码如下: # !/usr/bin/env python # encoding: utf-8 __author__ = ...
- Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression
Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression 一. 逻辑回归 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题, ...
- Python实现鸢尾花数据集分类问题——基于skearn的SVM
Python实现鸢尾花数据集分类问题——基于skearn的SVM 代码如下: # !/usr/bin/env python # encoding: utf-8 __author__ = 'Xiaoli ...
- Python模块及其导入
一.模块 1.模块的定义: 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少, 很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件 ...
- 将.dat文件导入数据库
*最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图&quo ...
随机推荐
- matlab中imresize
matlab中函数imresize简介: 函数功能:该函数用于对图像做缩放处理. 调用格式: B = imresize(A, m) 返回的图像B的长宽是图像A的长宽的m倍,即缩放图像. m大于1, 则 ...
- MVC 4 异步编程简化了
MVC 3 异步编程好麻烦,需要使用异步控制器,一个Action需要拆成两个,很不方便.MVC3的好处是,只需要.NET Framework 4.0就能运行 MVC 4 之后只需要使用async和aw ...
- top free综合监控工具
top选项: -d:指定刷新时间间隔 -n:指定刷新次数 -u:指定只显示user用户的进程信息 -p:指定只显示pid的进程信息 [root@linuxzgf ~]# top Mem: 817449 ...
- python开发进阶之路(一)
哎!好久没有写博客了,怪想念的,今天听了偶像的讲解,好多以前感觉很模糊的概念今天一下子就明朗了.下面就来整理一下今天的收获 一.如何成为一名优秀的开发人员 1.1 得先对自己使用的开发语言了如指掌, ...
- POJ 2516:Minimum Cost(最小费用流)
https://vjudge.net/problem/11079/origin 题意:有N个商店和M个供应商和K种物品,每个商店每种物品有一个需求数,每个供应商每种物品有一个供应量,供应商到商店之间的 ...
- bat命令
将DIR设置为当前文件所在的绝对路径 @echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 echo 当前盘符和路径的短文件名格式:%~sdp0 echo 当前批处理 ...
- 正则表达式(http://tieba.baidu.com/p/882391125)
觉得不错,就记下来了 正则表达式30分钟入门教程版本:v2.31 (2009-4-11) 作者:deerchao 转载请注明来源30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你 ...
- Linux phpwind论坛的安装
1:新建文件夹phpwind
- [问题2015S10] 复旦高等代数 II(14级)每周一题(第十一教学周)
[问题2015S10] 设 \(A\) 为 \(n\) 阶实方阵, 证明: 存在 \(n\) 阶非异实对称阵 \(R\), 使得 \(A'=R^{-1}AR\), 即 \(A\) 可通过非异实对称阵 ...
- Zabbix 3.0.3 SQL Injection
Zabbix version 3.0.3 suffers from a remote SQL injection vulnerability. ============================ ...