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=‘123456‘, 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"】导入失败"
时间: 2024-08-02 16:39:39

python 从文件导入分类的相关文章

python把文件中的邮箱分类 保存到相应的文件里面

python把文件中的邮箱分类 保存到相应的文件里面(测试数据100W数据时间10秒) #coding:utf-8 import time import linecache def readfile(file):     #读取数据     list_dict = {}     file_data =  [ x.replace('\n','') for x in linecache.getlines(file) if '@' in x ]     #把后缀名组成字典中的keys,按照要求把文件中

appium+python自动化51-adb文件导入和导出(pull push)

前言 用手机连电脑的时候,有时候需要把手机(模拟器)上的文件导出到电脑上,或者把电脑的图片导入手机里做测试用,我们可以用第三方的软件管理工具直接复制粘贴,也可以直接通过adb命令导入和导出. adb shell 1.在导入和导出前先对adb shell基本操作熟悉下,cmd输入adb shell就能进入了,android的系统是基于linux系统开发的,adb shell就是进入shell模式 2.查看文件详情和进入文件夹操作 C:\Users\admin>adb shell HWBND-H:/

Python中关于导入(import)语句的使用说明

在所有的语言中,语言的开发者都会为我们提供强大的库文件供我们调用,通过使用这些库文件,我们才可以把程序完美的运行起来,既然要用到库文件,我们就要导入我们需要使用的库文件,因为,机器是不知道我们想基于哪些库进行程序的编写的.在导入库的时候,不同的语言有自己的风格.例如在C/C++等语言中,我们使用#include <>或者#include ""来导入库或者头文件.那么在python中我们怎么导入库呢. 首先,在Python中,我们可以导入三种库:Python标准模块,Pyth

python模块以及导入出现ImportError: No module named &#39;xxx&#39;问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

将.dat文件导入数据库

*最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图",真正分类的就是"骥". 去搜狗实验室找到了一些样本进行下载,先下载了一些迷你版的样本数据,看着还不错,就下载吧,压缩包就不到700M,解压後,1G+. 特别是看到文件后缀是.dat,当场是懵逼的. **以前用过sqlLite,网上搜了下,答案是sqlLite是可以打开.dat的文件,

6.python模块(导入,内置,自定义,开源)

一.模块 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 2.模块的引入 在Python中用关键字import来引入某个模块,比如要引用模

【Python】Python对文件夹的操作

上一篇介绍了Python对文件的读写操作,现在来介绍一下Python对文件夹的操作.由于我是项目中用到的,所以我就以我的实际应用实例来说明吧.希望对大家有所帮助. 1.实例需求: 现在有一个文件夹myDir,该文件夹中又有n个文件夹dir1,Dir2, ..., dirN,每个文件夹中又有m个文件,这个实例需要达到的目的就是要将这n个文件夹dir1,Dir2, ..., dirN中的所有文件全部写到一个新文件中,该新文件在文件夹myDir下. 2.源代码: test.py代码如下: import

python库文件路径

python中import语句导入库文件路径可通过sys.path查看.写一个简单的小程序: 1 import sys 2 print sys.path 运行它,本机上得到的结果如下: ['', '/usr/local/lib/python2.7/dist-packages/Paste-1.7.5.1-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/

Python工程文件中的名词解释---Module与Package的区别

当我们在已有的Python工程文件中创建新的内容是,通常会有两种类型文件供你选择---Module和Package,对于初学者来说会搞不清楚这两种文件直接的关系.这里就来解释一下这两者之间的关系. Module简介:  中文翻译成"模块",所谓的模块其实就是能够独立的完成一组任务的代码集.在Python里面Module一般就是一个独立的.py文件(有时候也可能是多个). Package简介:  中文翻译成"包",在Python中,Package就相当于多个Modul