`
kanpiaoxue
  • 浏览: 1777441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

python FAQ 问答题集锦(一)

 
阅读更多

自己写了几个常用的python小函数,用于练习和日常使用:(Python版本:python2.7)

 

0、文件的编码:

很多初学python的朋友,经常遇到文件编码问题。处理不当,会出现乱码,严重的,会因为在文件内写入不同格式的编码python代码,造成python无法编译。

这里给出解决的方法:推荐大家使用utf-8编码,它不仅包含了西欧的字符集,还包含了亚洲等地区的字符集。

在python的.py文件的第一行,写入:#-*-coding:utf-8-*-

或者为: #encoding=utf-8

如:

 

#-*-coding:utf-8-*-


# some python code here

 

这样,就解决了问题。

 

1、按照正则表达式,在指定的目录中查找匹配的文件列表

 

def seachFiles(folder, pattern):
    '''
    @param folder: 指定检索的目录
    @param pattern: 指定检索匹配的正则表达式
    '''
    if not os.path.isdir(folder):
        print 'Error:', folder, 'is not a valid folder.'
        return None
    else:
        rs = []
        prog = re.compile(pattern)
        for tmp in os.walk(folder):
            root = tmp[0]
            fileNames = tmp[2]
            for fileName in fileNames:
                path = os.path.join(root, fileName).strip()
                m = prog.match(path)
                if m :
                    rs.append(path)
        return rs

 

 

2、对指定的文件,统计文件内容的行数

 

def countFileRows(path): 
    '''
    @param path: 需要统计行数的文件名称
    '''
    if not os.path.isfile(path):
        print 'Error:', path, 'is not a valid path.'
        return None
    else:
        with open(path, 'r') as f:
            return len(f.readlines())

 

3、对指定文件列表,按照正则表达式对文件列表中的每个文件的每一行进行匹配,把匹配的结果作为列表返回

 

def matchLines(files, pattern):
    '''
    @param files: 需要扫描的文件的列表[r'c:\hello.txt',r'c:\world.txt']
    @param pattern: 需要匹配的正则表达式
    '''
    if files is None or 0 == len(files) or pattern is None:
        print 'Error: please check args'
    else:
        lst = []
        prog = re.compile(pattern)
        for tmpFile in files:
            if not os.path.isfile(tmpFile):
                print 'Error:', tmpFile, 'is not a valid tmpFile'
            else:
                with open(tmpFile) as f:
                    for tmpStr in f:
                        line = tmpStr.strip()
                        if line == '':
                            continue
                        else:
                            m = prog.match(line)
                            if m:
                                lst.append(line)
        return lst

   这里在给出一个精简版的代码,主要是利用python的列表解析功能:

def matchLinesListAnalysis(files, pattern):
    lst = []
    prog = re.compile(pattern)
    for tmpFile in files:
        lst += [line for line in open(tmpFile) if prog.match(line.strip())]
    return lst

 

 

4、得到指定范围(_range),指定个数(count)的具有重复元素的列表

 

def createRandomNumber(_range, count):
    '''
    @note: 得到指定范围(_range),指定个数(count)的具有重复元素的列表
    @param _range: 随机数的范围
    @param count: 随机数的个数
    '''
    return [int(math.floor(random.random() * _range)) for x in range(count)]

 

5、输入一个具有重复元素的列表,生成一个字典。 这个字典的key就是列表的元素,字典的value是该元素在列表中重复出现的次数

 

def countRepeat(lst):
    '''
    @note: 输入一个具有重复元素的列表,生成一个字典。 这个字典的key就是列表的元素,字典的value是该元素在列表中重复出现的次数
    @param lst: 具有重复元素的列表 
    '''
    if lst is None or 0 == len(lst):
        print 'Error: args is None or empty.'
        return None
    else:
        d = {}
        for key in lst:
            d[key] = d.get(key, 0) + 1
        return d

 

6、python实现定时任务,APScheduler定时框架的简单示例

APScheduler的内容请参考: http://packages.python.org/APScheduler/index.html

示例:间隔 1 秒钟,打印一句话

 

class SchedulerTest(object):
    def __init__(self):
        self.sched = Scheduler(daemonic=False)
        print  self.sched
    def start(self):
        self.sched.add_cron_job(self.job, year='*', month='*', day='*', hour='*', minute='*', second='*/2', args=['hehe'])
        self.sched.start()
    def job(self, word):
        print 'say ', word

 

7、文件列求和函数

描述:给定一个文件,文件的第一列输入数字。用python编写一个函数,将该列的所有数字求和

目的:练习文件操作,列表解析的操作

文件的内容如下:C:\Users\test\Desktop\new  2.txt

 

1
2
3

3.2 

-1000

1236.55 

 python的函数如下:

 

def calculateColumn(f):
    return sum([float(x.strip()) for x in open(f) if x.strip() != ''])

 

 

8、数据查出记录,在该记录中进行数据筛选。(其实可以通过SQL的where子句中实现筛选)

[('tom', '12', 'm'), ('jack', '12', 'm'), ('lucy', '12', 'w'), ('mery', '13', 'w'), ('jack', '23', 'm')]

找出其中年纪12岁的,女性成员

代码如下:

 

    f = [('tom', '12', 'm'), ('jack', '12', 'm'), ('lucy', '12', 'w'), ('mery', '13', 'w'), ('jack', '23', 'm')]
    print [x for x in f if x[1] == '12' and x[2] == 'w']

 

9、链接MySQL数据库

为了进行MySQL的数据库连接,插入数据,查询数据,需要进行一些前期的准备,主要是连接MySQL数据的lib的安装。

我使用的是 MySQLdb。下载地址:

http://sourceforge.net/projects/mysql-python/

或者:

http://www.codegood.com/

文档:

http://mysql-python.sourceforge.net/MySQLdb.html

我自己写了一个小例子

描述:创建一个数据库 testdb,创建一个表 user_info(建表语句见下例).用MySQLdb插入数据,然后进行查询。

目的:配置文件的读取,MySQL数据的连接,数据的插入,数据的查询

表user_info的建表语句如下:

 

create database testdb;
    use testdb;
    create table user_info(
        id bigint(20) auto_increment,
        name varchar(30) not null,
        sex varchar(1) not null,
        email varchar(50),
        primary key (id)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;

 python的代码如下:

 

class User(object):    
    def __init__(self, id, name, sex, email):
        self.id = id
        self.name = name
        self.sex = sex
        self.email = email
        
class MySQLTest(object):
    '''
    create database testdb;
    use testdb;
    create table user_info(
        id bigint(20) auto_increment,
        name varchar(30) not null,
        sex varchar(1) not null,
        email varchar(50),
        primary key (id)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;
    '''
    def __init__(self, configFile):
        self.config = ConfigParser.ConfigParser()
        self.config.read(configFile)
        self.section = 'mysql_connection_1'
        
    def getConnection(self):
        host = self.config.get(self.section, 'host')
        user = self.config.get(self.section, 'user')
        passwd = self.config.get(self.section, 'passwd')
        db = self.config.get(self.section, 'db')
        port = self.config.getint(self.section, 'port')# getint
        charset = self.config.get(self.section, 'charset')
        conn = MySQLdb.connect(host=host, user=user, passwd=passwd, db=db, port=port, charset=charset)
        return conn
    
    def createUsers(self, count):
        conn = None
        cursor = None
        try:
            conn = self.getConnection()
            cursor = conn.cursor()
            for i in range(count):
                name = 'test-' + str(i)
                sex = 'w' if i % 2 == 0 else 'm'
                email = name + '@' + '163.com'
                sql = "insert into user_info(name,sex,email) values('" + name + "','" + sex + "','" + email + "')"
                cursor.execute(sql)
        except Exception as e:
            print e
        finally:
            if cursor:
                cursor.close()
            if conn :
                conn.close()    
            
    def getUserList(self):
        lst = []
        conn = None
        cursor = None
        try:
            conn = self.getConnection()
            cursor = conn.cursor()
            cursor.execute('select * from user_info')
            for tmp in cursor.fetchall():
                row = dict(zip([d[0] for d in cursor.description], tmp))
                user = User(row.get('id'), row.get('name'), row.get('sex'), row.get('email'))
                lst.append(user)
            return lst
        except Exception as e:
            print e
            return None
        finally:
            if cursor :
                cursor.close()
            if conn:
                conn.close()

配置文件如下:E:\python_workspace\learningPython\src\congfig.ini 

 

[mysql_connection_1]
host=localhost
user=root
passwd=root
db=testdb
port=3306
charset=utf8

 运行如下:

 

if __name__ == '__main__':
    mySQLTest = MySQLTest(r'E:\python_workspace\learningPython\src\congfig.ini')
    #mySQLTest.createUsers(100)
    userList = mySQLTest.getUserList()
    for user in userList:
        print user.id, user.name, user.sex, user.email

 

 

10、日期计算,是人们日常经常遇到的一个问题。人们生活中,到处可以看见日期的影子。比如,生日,“今天”,“昨天”,“明天”,“某日至某日,XXX计划干什么事情”... 等等。

所以这里给出了一个DateUtils的类,里面记述了一些使用的日期小函数。这里的DateUtils的默认日期格式: yyyy-MM-dd

python代码如下:

 

 

class DateUtils(object):
    '''
    Date的工具类
           备注:本工具类,日期格式全部使用日期短格式:%Y-%m-%d
           例如:2012-01-01
    '''
    DATE_SHORT_PATTERN = r'(\d{4})-(\d{2})-(\d{2})'
    DATE_SHORT_FORMAT = '%Y-%m-%d'
    
    def __init__(self):
        pass
    
    def getMondayAndSundayByDate(self, dateStr):      
        '''
    @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周一和周日的日期元组,如: ('2012-05-07', '2012-05-13')
        '''
        monday = self.getMondayByDate(dateStr)
        sunday = self.getSundayByDate(dateStr)
        return (monday, sunday)
        
    def getMondayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周一 结果:2012-05-07
        '''
        
        return self._getWeekdayByDate(dateStr, 0)
    def getTuesdayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周二 结果:2012-05-08
        '''
        return self._getWeekdayByDate(dateStr, 1)
    def getWednesdayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周三 结果:2012-05-09
        '''
        return self._getWeekdayByDate(dateStr, 2)
    def getThursdayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周四 结果:2012-05-10
        '''
        return self._getWeekdayByDate(dateStr, 3)
    def getFridayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周五 结果:2012-05-11
        '''
        return self._getWeekdayByDate(dateStr, 4)
    def getSaturdayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周六 结果:2012-05-12
        '''
        return self._getWeekdayByDate(dateStr, 5)
    def getSundayByDate(self, dateStr):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09
        备注:得到输入的日期所在的周日 结果:2012-05-13
        '''
        return self._getWeekdayByDate(dateStr, 6)
    
    
    def _getWeekdayByDate(self, dateStr, weekday):
        '''
        @param dateStr: 输入的任意的天的字符串,如:2012-05-09 
        @param weekday: 周几的数字,从 0 - 6,是周一至周日
        备注:得到输入日期所在的周几的日期 
        '''
        d = self.parseDate(dateStr)
        if d.weekday() > weekday:
            while d.weekday() != weekday:
                d -= datetime.timedelta(days=1)
        elif d.weekday() < weekday:
            while d.weekday() != weekday:
                d += datetime.timedelta(days=1)
        return self.formartDate(d)
        
    def getYestoday(self):
        '''
        得到昨天的日期
        '''
        return datetime.date.today() - datetime.timedelta(days=1)
    
    def getToday(self):
        '''
        得到今天的日期
        '''
        return datetime.date.today()
    
    def getTomorrow(self):
        '''
        得到明天的日期
        '''
        return datetime.date.today() + datetime.timedelta(days=1)
    
    def getDateStrList(self, beginDate, endDate):
        '''
        得到两个日期之间的日期字符串列表(包含起始日期和结束日期)
        '''
        return [self.formartDate(x) for x in self.getDateList(beginDate, endDate)]
    
    def getDateList(self, beginDate, endDate):
        '''
        得到两个日期之间的日期列表(包含起始日期和结束日期)
        '''
        begin = self.parseDate(beginDate)
        end = self.parseDate(endDate)
        if begin > end:
            print 'Error: beginDate is after endDate'
            return None
        else:
            return [begin + datetime.timedelta(days=i) for i in range(self.getDays(beginDate, endDate) + 1)] # days +1 包括结束日期
        
    def getDays(self, beginDate, endDate):
        '''
        得到两个日期之间的天数(包含起始日期,不包含结束日期)
        '''
        begin = self.parseDate(beginDate)
        end = self.parseDate(endDate)
        if begin > end:
            print 'Error: beginDate is after endDate'
            return None
        else:
            return  (end - begin).days
    
    def parseDate(self, dateStr):
        '''
        以日期的短格式,转换日期字符串为日期类型
        '''
        prog = re.compile(self.DATE_SHORT_PATTERN)
        m = prog.match(dateStr)
        if m:
            return datetime.date(int(m.group(1)), int(m.group(2)), int(m.group(3)))
        else:
            print 'Error: can not match ' + self.DATE_SHORT_PATTERN
            return None
        
    def formartDate(self, date):
        '''
        以日期的短格式,格式化日期类型为字符串类型
        '''
        return date.strftime(self.DATE_SHORT_FORMAT)

 

 

11、python连接oracle

人们日常接触的数据库最多的莫过于mysql和Oracle了。现在这里介绍python连接oracle的方法,采用cx_Oracle模块

下载地址:

http://cx-oracle.sourceforge.net/

文档地址:

http://cx-oracle.sourceforge.net/html/index.html

我下载的源码包是:cx_Oracle-5.0.4.tar.gz

python setup.py build

python setup.py install

如果遇到问题,请参考本博客里面关于安装cx_Oracle报错问题的解决方案。

python连接Oracle,我这里创建了一个user_info的表,插入测试用数据

user_info的SQL:

 

    create table user_info(
        id number(11),
        user_key varchar2(30),
        user_mobile number(11),
        primary key(id)
    );

 python的脚本:

 

#-*-coding:utf-8-*-
import cx_Oracle
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

class User(object):
    def __init__(self, id, user_key, user_mobile):
        self.id = id
        self.user_key = user_key
        self.user_mobile = user_mobile

class OracleTest(object):
    '''
    create table user_info(
        id number(11),
        user_key varchar2(30),
        user_mobile number(11),
        primary key(id)
    );
    '''
    def __init__(self, url):
        self.url = url
        
    def getConnection(self):
        return cx_Oracle.connect(self.url)
    
    def getUserList(self): 
        conn = None
        cursor = None
        try:
            conn = self.getConnection()
            cursor = conn.cursor()
            sql = '''
            select id,user_key,user_mobile from user_info
            '''
            cursor.execute(sql)
            cursor.rowfactory = User
            #print cursor.description
            return [user for user in cursor]
        except Exception as e:
            print 'Error', e
            return None
        finally:
            if cursor:
                cursor.close()
            if conn:
                conn.close()

if __name__ == '__main__':
    url1 = 'test/test@192.168.0.1:1521/test'
    oracleTest = OracleTest(url1)
    for user in oracleTest.getUserList():
        print user.id, user.user_key, user.user_mobile

 

 

12、 

 

13、

14、

15、

 

分享到:
评论

相关推荐

    Python项目开发案例集锦.rar

    Python项目开发案例集锦.rar

    python项目开发案例集锦_python

    python项目各个案例,并且有非常详细的说明以及步骤,适合于新手以及编程经验不高的人。容易入门,容易看懂。

    python讲师面试题_吐血总结!20道Python面试题集锦附答案.docx

    Python面试题总结 Python是一种流行的编程语言,广泛应用于Web开发、数据分析、人工智能等领域。以下是Python面试题总结,涵盖了Python基础知识、编程、数据分析、函数库等多个方面。 Q1: Python中的列表和元组有...

    智能问答系统python实现

    基于知识图谱的智能问答系统python实现(复旦大学论文基于qa语料和知识库的问答系统)_python 智能问答,python 智能问答系统-机器学习代码类资源本代码实现是基于python实现的基于复旦大学崔万云博士的learing ...

    Python经典面试题集锦 Python练习题 Python考试题目整理汇总 共18页.pdf

    这份"Python经典面试题集锦"包含了18页的Python练习题和考试题目,旨在帮助学习者和求职者熟悉Python的核心概念和技术。 1. **单例模式**:在软件设计模式中,单例模式确保一个类只有一个实例,并提供一个全局访问...

    第14届蓝桥杯Python省赛真题-大学B组

    第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛...

    Python企业面试题集锦(附答案)

    Python企业面试题集锦涵盖了从基础到进阶的多个知识点,这些知识点对于理解Python的核心特性和实际应用至关重要。以下是对一些重要问题的详细解析: 1. **为什么学习Python**: Python是一种高级编程语言,其易读...

    python计算机二级题库(附带答案)

    python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python...

    基于python的自动问答系统.zip

    在这个项目中,“基于Python的自动问答系统”显然使用了Python编程语言来实现这一功能。Python因其语法简洁、库丰富以及在数据处理和自然语言处理(NLP)领域的强大支持而被广泛应用于此类任务。 【描述】:“大学...

    第十章Python列表习题及答案--中文

    Python列表是Python中的一种基本数据结构,用于存储多个数据元素的集合。列表可以包含不同类型的数据元素,如数字、字符串、列表等。Python列表习题及答案--中文章节涵盖了Python列表的基础知识,包括列表的创建、...

    基于知识图谱的智能问答系统python实现-python智能问答,python智能问答系统

    基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,...

    Python聊天机器人,智能问答系统.zip

    Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python...

    中小学数学题程序_instance62k_python题_Python解数学题_Python解奥数题_python解初中题_

    在Python编程领域,解决中小学数学题,包括奥数题和初中数学题,是一种常见的实践,旨在提高编程技能和逻辑思维能力。"instance62k_python题"可能指的是一个包含62000个数学问题的实例集合,这些题目涵盖了从小学到...

    Python-一个自动回复FAQ问题的聊天机器人

    总之,这个Python聊天机器人项目是NLP应用的一个实例,展示了如何通过简单的文本处理技术和现代的词向量方法来构建一个能自动回复FAQ问题的系统。随着技术的发展,我们可以期待这类机器人在理解和处理自然语言方面变...

    大一python编程题库和答案-Python编程练习题.pdf

    这份题库旨在帮助初学者巩固Python编程基础,通过一系列练习题来提高编程能力。下面将详细解释其中涉及的知识点: 1. **整除与条件判断**: 在第一个题目中,要求找出所有能被17整除的三位数。这里使用了`range()`...

    python 医药问答系统

    Python医药问答系统是一种基于Python开发的应用程序,它利用知识图谱技术来构建和管理医疗领域的专业知识库,从而实现对用户提出的医药相关问题进行智能解答。这个系统的核心在于理解和解析问题,检索相关知识,以及...

    Python面试选择题题库

    自己整理一些大厂的面试题题库,都是一些常见的题目,希望能给大家提供帮助,题库分为3个部分这是第二部分

    Python期末试题题库完整.pdf

    Python是一种高级的、解释型的编程语言,它支持面向对象、命令式、函数式和过程式编程风格。Python语言的设计目标是提高开发者的生产力和代码的可读性。 1. Python基本语法 Python语言的基本语法与C语言类似,但它...

    python基础练习题100道.zip

    python基础练习题100道

Global site tag (gtag.js) - Google Analytics