Python

记录学习和使用Python过程中遇到的问题以及解决的办法

python中文乱码

LC 2016-05-13 Python

我们使用Python时,常常会用到交互命令raw_input,但是如果输入中文,没有经过编码处理,有时候程序就不是你想要的结果。 # -*- coding: utf-8 -*- import os print u"这里是来自LC\'的问候。" # 这里是来自LC'的问候。 print '=' * 10 # ========== print u'这将直接执行' + os.getcwd() # 这将直接执行C:\Python27 print "直接打印Unicode" # 鐩存帴鎵撳嵃Unicode print u"直接打印Unicode" # 直接打印Unicode print u"Unicode转换成GB18030".encode('gb18030') # Unicode转换成GB18030 print "UTF-8中文转换到GB18030, 然后再打印".decode("utf-8").encode('gb18030') # UTF-8中文转换到GB18030, 然后再打印 while True: import sys, locale message1 = raw_input(u'提问1:'.encode('gb18030')).decode(sys.stdin.encoding or locale.getpreferredencoding(True)) if message1 == u"你好": print message1 else: print u"我不知道你在说什么" message2 = raw_input(u'提问2>'.encode('gb18030')) print message2 if message2 == u"你好": print message2 else: print u"我不知道你在说什么" #import chardet #print chardet.detect(message)     如何把raw_input输入的字符转成utf-8编码格式? Python中可以使用decode和encode两个方法。先decode把str转成Unicode格式,然后encode把Unicode编成要求的字符串 。 decode用法:str  -> decode('the_coding_of_str') -> unicode encode用法:unicode -> encode('the_coding_you_want') -> str 字符串是Unicode经过编码后的字节组成。decode时需要知道输入的编码格式,如果格式不对python会抛出错误   C:\Python27>python bianmaceshi.py 这里是来自LC'的问候。 ========== 这将直接执行C:\Python27 鐩存帴鎵撳嵃Unicode -- 直接打印出来就是这样的乱码,使用后面三种格式。就对了 直接打印Unicode Unicode转换成GB18030 UTF-8中文转换到GB18030, 然后再打印 提问1:你好 你好 提问2>你好 你好 bianmaceshi.py:26: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode...

使用python提取mdx中的数据

LC 2016-05-10 Python

使用python提取mdx中的数据 mdx/mdd 是供 MDict、GoldenDict 等加载使用的词库,有些时候我们想要自己动手排版,这就需要解压 mdx/mdd ,提取其中文字、图片、音频等数据,这时候就可以利用 Python 脚本来处理。 我使用的是Python 2.7和readmdict.py、 ripemd128.py、pureSalsa20.py 1.运行 python readmdict.py 返回错误 LZO compression support is not available 2.用编辑器打开readmdict.py文件看了一下,将以下几行都注释掉: try: import lzo except ImportError: lzo = None print("LZO compression support is not available")   运行 python readmdict.py C:\Python27\readmdict>python readmdict.py Try Brutal Force on Encrypted Key Blocks Traceback (most recent call last): File "readmdict.py", line 649, in <module> mdx = MDX(args.filename, args.encoding, args.substyle, args.passcode) File "readmdict.py", line 503, in __init__ MDict.__init__(self, fname, encoding, passcode) File "readmdict.py", line 105, in __init__ self._key_list = self._read_keys_brutal() File "readmdict.py", line...

新手学python-2015年终奖计算python实现

LC 2016-05-10 Python

  年终奖个人所得税计算方法   年终奖拿到手大家乐开怀,不过年终奖也会要像发工资一样。 要交税费的哦。很多人不知道年终奖个人所得税怎么计算!这里小编居仁义就来为大家分享年终奖个人所得税的计算方法。 仅供参考!!   国税发[2005]9号文件基本规定是:“纳税人取得全年一次性奖金,应单独作为一个月工资、薪金所得计算纳税”。   年终奖个人所得税计算方式:   1、发放年终奖的当月工资高于3500元时,年终奖扣税方式为:年终奖*税率-速算扣除数,税率是按年终奖/12作为“应纳税所得额”对应的税率。   2、当月工资低于3500元时,年终奖个人所得税=(年终奖-(3500-月工资))*税率-速算扣除数,税率是按年终奖-(3500-月工资)除以12作为“应纳税所得额”对应的税率。   这里我们以一个示例进行计算演示:   小王在2013年12月工资6000元,同时领到2013年的年终奖20000元,当月所需缴纳的个人所得税如下:   1)当月工资个人所得税=(6000-3500)*10%-105=145元   2)年终奖个人所得税=20000*10%-105=1895元   当月个人所得税总额=145+1895=2040元   由于单位发放给员工的年终奖形式不同,个人所得税计算方法也不尽相同。   一、员工当月的工资薪金超过「3500」元,再发放的年终奖单独作为一个月的工资计算缴纳个人所得税。   全年一次性奖金,单独作为一个月计算时,除以12找税率,但计算税额时,速算扣除数只允许扣除一次。   例一:赵某2013年1月工资5000,年终奖24000,无其它收入。   赵某工资部分应缴纳个人所得税:(5000-3500)*3%=45元   赵某年终奖(24000)部分应缴纳个人所得税计算:   先将雇员当月内取得的全年一次性奖金,除以12个月,即:24000/12=2000元,   再按其商数确定适用税率为10%,速算扣除数为105.   赵某年终奖24000应缴纳个人所得税:   24000*10%-105=2295元。   赵某2013年1月份应缴纳个人所得税2340元。   二、员工当月的工资薪金不超过3500元,再发放的年终奖单独作为一个月的工资计算缴纳个人所得税。   但可以将全年一次性奖金减除“雇员当月工资薪金所得与费用扣除额的差额”后的余额,作为应纳税所得额。其中“雇员当月工资薪金所得”以收入额扣除规定标准的免税所得(如按规定缴纳的社会保险和住房公积金等)后的数额。   例二:钱某2013年1月工资2000,年终奖24000,无其它收入。   钱某当月工资2000元,未超过费用扣除标准3500元,不需要缴纳个人所得税。   钱某2013年1月当月工资薪金所得与费用扣除额的差额为3500-2000=1500元。   钱某年终奖24000元,先减除“当月工资薪金所得与费用扣除额的差额(1500元)”,22500元为应纳税所得额。   22500除以12个月,即:22500/12=1875元,   再按其商数确定适用税率为10%,速算扣除数为105.   钱某年终奖24000应缴纳个人所得税:   (24000-1500)*10%-105=2145元。   钱某2013年1月份应缴纳个人所得税2145元。   三、员工一个年度在两个以上单位工作过,只能按照国税发[2005]9号文件规定,在一个纳税年度内,对每一个纳税人年终奖计税办法只允许采用一次,纳税人可以自由选择采用该计税办法的时间和发放单位计算。   该条款的要点是:   1,一个员工2013年1月发放的年终奖适用了除以12找税率的优惠计算政策,2013年其它月份就不能再适用了。   2,一个员工一年一次,在两处以上取得年终奖,也只能适用一次。   3,员工即使工作时间不足12个月,也可以适用一次。   例三:孙某2012年1-3月在石油企业工作,2012年4-8月跳槽到电信企业,2012年9月至今跳槽到房地产企业工作,   如果孙某2012年12月在房地产企业取得工资5000,年终奖24000,其它无收入,虽然钱某只2012年在房地产企业工作4个月,但其应缴纳个人所得税与例一赵某相同,即当月工资部分应缴纳个人所得税45,年终奖部分也是除12找税率,应缴纳个税2295元。   房地产企业计提年终奖时,计提、发放会计处理同例一。   四、员工同一月份在两个以上单位取得年终奖,可以选择一个单位的一次性奖金按照国税发[2005]9号文件优惠办法计算,从另一单位取得的年终奖合并到当月工资薪金项目缴税。   国税发[2005]9号文件规定:“在一个纳税年度内,对每一个纳税人,该计税办法只允许采用一次”。如果同一个人同月在两个企业都取得了年终一次性奖金,纳税人在自行申报时,不可以将这两项奖金合并计算缴纳个人所得税,享受一次性奖金的政策;对该个人按规定只能享受一次全年一次性奖金的优惠算法。   例四:李某2013年1月工资5000,取得本企业发放的年终奖24000元,另取得兼职单位发放的年终奖6000元,无其它收入。   李某本企业年终奖(24000)部分应缴纳个人所得税计算:先将雇员当月内取得的全年一次性奖金,除以12个月,即:24000/12=2000元,   再按其商数确定适用税率为10%,速算扣除数为105.   李某本企业年终奖24000应缴纳个人所得税:   24000*10%-105=2295元。   李某取得的兼职单位发放6000元年终奖应合并到李某当月工资薪金中计算缴纳。如果兼职单位按发放年终奖计算个人所得税,代扣代缴了个人所得税6000*3%=180元。   李某在本企业取得工资5000元,本企业代扣代缴(5000-3500)*3%-=45元个人所得税。   年终汇算清缴,李某工资部分应缴纳个人所得税:(5000 6000-3500)*20%-555=945元。   由以上这些说明,用Python实现了下,只支持上面提到的1,2情况。 中间可能还有些错误存在,不过也先记录下:   print """ **************************************************************** These results just be suitable for: working on one company in a year and just get bonus once in a year. **************************************************************** """ def ab(your_salary, your_annual_bonus): ab_per_m = annual_bonus / 12 if ab_per_m <= 1500: ab_tax = annual_bonus * 3 / 100 - 0 if 1500 < ab_per_m <= 4500: ab_tax = annual_bonus * 10 / 100 - 105 if 4500 < ab_per_m...

安装使用virtualenv

LC 2015-12-18 Python

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够: 1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用 用类似“Windows下Python,setuptools,pip,virtualenv的安装”的方法在linux下安装了virtualenv。 其中有一段非常有用的话:“需要注意,当前irtualenv的版本是1.11,安装的时候如果不设定==1.10.1,默认会安装最新版本,而1.11版本的virtualenv是有问题的,安装1.11后,在创建环境的时候会失败,报错: setuptools pip failed with error code 1.这个问题是1.11的本身的问题,用1.10.1版本,没有这个问题,所以我们安装的时候需要明确版本1.10.1。”   这里记录一下用法: [root@lc ppy]# virtualenv vProject New python executable in vProject/bin/python Installing Setuptools..............................................................................................................................................................................................................................done. Installing Pip.....................................................................................................................................................................................................................................................................................................................................done. [root@lc ppy]# cd python_env/ [root@lc python_env]# ls bin  guessnumber.py  include  lib [root@lc python_env]# cd bin/ [root@lc bin]# ls activate  activate.csh  activate.fish  activate_this.py  easy_install  easy_install-2.7  pip  pip-2.7  python  python2  python2.7 [root@lc bin]# cd .. [root@lc python_env]# cd .. [root@lc ppy]# cd vProject/ [root@lc vProject]# source bin/activate  -- Comment:启动virtualenv虚拟环境 (vProject)[root@lc vProject]# deactivate -- Comment:退出virtualenv虚拟环境 [root@lc vProject]#   Just记录一下。 需要windows下安装方法的可移步“Windows下Python,setuptools,pip,virtualenv的安装”。

新手学Python-SSH登录

LC 2015-12-10 Python

python自动登录并执行命令: #!/usr/bin/env python # -*- coding: utf-8 -*- # filename: pexpect_ssh.py ''' Created on 2015-12-10 @author: LC ''' import pexpect if __name__ == '__main__': user = 'admin' ip = '192.168.0.1' mypassword = 'password' print user child = pexpect.spawn('ssh %s@%s' % (user,ip)) child.expect ('password:') child.sendline (mypassword) child.expect('$') child.sendline('sudo -s') child.expect (':') child.sendline (mypassword) child.expect('#') child.sendline('ls -la') child.expect('#') print child.before # Print the result...

新手学python-codecademy-Class-Practice step-by-step

LC 2015-11-25 Python

Practice step by step: Classes Make your own Car and learn how to driveCar()!     Class basics Classes can be very useful for storing complicated objects with their own methods and variables. Defining a class is much like defining a function, but we use the classkeyword instead. We also use the wordobject in parentheses because we want our classes to inherit the object class. This means that our class has all the properties of an object, which is the simplest, most basic class. Later we'll see that classes can inherit other, more complicated classes. An empty class would look like this: class ClassName(object):     # class statements go here   Instructions Define a new class named "Car"....

新手学python-codecademy-Class-Learn step-by-step

LC 2015-11-24 Python

Learn step-by-step: Why Use Classes? Python is an object-oriented programming language, which means it manipulates programming constructs called objects. You can think of an object as a single data structure that contains data as well as functions; functions of objects are calledmethods. For example, any time you call len("Eric") Python is checking to see whether the string object you passed it has a length, and if it does, it returns the value associated with that attribute. When you call my_dict.items() Python checks to see if my_dict has anitems() method (which all dictionaries have) and executes that method if it finds it. But what makes "Eric" a string andmy_dict a dictionary? The fact that they're instances...

新手学python-笨方法学python-ex35-分支和函数

LC 2015-11-15 Python

跟着笨方法学python个教程学习,边学边做习题边记录。 新手学python-笨方法学python-ex35-分支和函数 - 学习记录 课程内容: 你已经学会了 if 语句、函数、还有列表。现在你要练习扭转一下思维了。把下面的代码写下来,看你是否能弄懂它实现的是什么功能。 from sys import exit def gold_room(): print "This room is full of gold. How much do you take?" next = raw_input("> ") if "0" in next or "1" in next: how_much = int(next) else: dead("Man, learn to type a number.") if how_much < 50: print "Nice, you're not greedy, you win!" exit(0) ...

新手学python-笨方法学python-ex33-While 循环

LC 2015-11-14 Python

跟着笨方法学python个教程学习,边学边做习题边记录。 新手学python-笨方法学python-ex33-While 循环 - 学习记录 课程内容: 接下来是一个更在你意料之外的概念: while-loop``(while 循环)。``while-loop 会一直执行它下面的代码片段,直到它对应的布尔表达式为 False 时才会停下来。 等等,你还能跟得上这些术语吧?如果你的某一行是以 : (冒号, colon)结尾,那就意味着接下来的内容是一个新的代码片段,新的代码片段是需要被缩进的。只有将代码用这样的方式格式化,Python 才能知道你的目的。如果你不太明白这一点,就回去看看“if 语句”和“函数”的章节,直到你明白为止。 接下来的练习将训练你的大脑去阅读这些结构化的代码。这和我们将布尔表达式烧录到你的大脑中的过程有点类似。 回到 while 循环,它所作的和 if 语句类似,也是去检查一个布尔表达式的真假,不一样的是它下面的代码片段不是只被执行一次,而是执行完后再调回到 while 所在的位置,如此重复进行,直到 while 表达式为 False 为止。 While 循环有一个问题,那就是有时它会永不结束。如果你的目的是循环到宇宙毁灭为止,那这样也挺好的,不过其他的情况下你的循环总需要有一个结束点。 为了避免这样的问题,你需要遵循下面的规定: 1.尽量少用while-loop,大部分时候for-loop是更好的选择。 2.重复检查你的while语句,确定你测试的布尔表达式最终会变成False。 3.如果不确定,就在while-loog的结尾打印出你要测试的值。看看它的变化。 在这节练习中,你将通过上面的三样事情学会while-loop: i = 0 numbers= [] while i < 6: print "At the top i is %d" % i numbers.append(i) i = i + 1 print "Numbers now: ", numbers print "At the bottom i is %d" % i print "The numbers: " for num in numbers: print num     运行该程序: $python ex33.py At the top i is 0 Numbers now: [0] At the...

新手学python-笨方法学python-ex34-访问列表的元素

LC 2015-11-14 Python

跟着笨方法学python个教程学习,边学边做习题边记录。 新手学python-笨方法学python-ex34-访问列表的元素 - 学习记录 课程内容: 列表的用处很大,但只有你能访问里边的内容时它才能发挥出作用来。你已经学会了按顺序读出列表的内容,但如果你要得到第 5 个元素该怎么办呢?你需要知道如何访问列表中的元素。访问第一个元素的方法是这样的: animals = ['bear', 'tiger', 'penguin', 'zebra'] bear = animals[0] 你定义一个 animals 的列表,然后你用 0 来获取第一个元素?! 这是怎么回事啊?因为数学里边就是这样,所以 Python 的列表也是从 0 开始的。虽然看上去很奇怪,这样定义其实有它的好处,而且实际上设计成 0 或者 1 开头其实都可以, 最好的解释方式是将你平时使用数字的方式和程序员使用数字的方式做对比。 假设你在观看上面列表中的四种动物(['bear', 'tiger', 'penguin', 'zebra']) 的赛跑,而它们比赛的名词正好跟列表里的次序一样。这是一场很激动人心的比赛,因为这些动物没打算吃掉对方,而且比赛还真的举办起来了。结果你的朋友来晚了,他想知道谁赢了比赛,他会问你“嘿,谁是第 0 名”吗?不会的,他会问“嘿,谁是第 1 名?” 这是因为动物的次序是很重要的。没有第一个就没有第二个,没有第二个也没有第三个。第零个是不存在的,因为零的意思是什么都没有。“什么都没有”怎么赢比赛嘛,完全不合逻辑。这样的数字我们称之为“序数(ordinal number)”,因为它们表示的是事物的顺序。 而程序员不能用这种方式思考问题,因为他们可以从列表的任何一个位置取出一个元素来。对程序员来说,上述的列表更像是一叠卡片。如果他们想要 tiger,就抓它出来,如果想要zebra,也一样抓取出来。要随机地抓取列表里的内容,列表的每一个元素都应该有一个地址,或者一个 “index(索引)”,而最好的方式是使用以 0 开头的索引。相信我说的这一点吧,这种方式获取元素会更容易。这类的数字被称为“基数(cardinal number)”,它意味着你可以任意抓取元素,所以我们需要一个 0 号元素。 那么,这些知识对于你的列表操作有什么帮助呢?很简单,每次你对自己说“我要第 3 只动物”时,你需要将“序数”转换成“基数”,只要将前者减 1 就可以了。第 3 只动物的索引是 2,也就是 penguin。由于你一辈子都在跟序数打交道,所以你需要用这种方式来获得基数,只要减 1 就都搞定了。 记住: ordinal == 有序,以 1 开始;cardinal == 随机选取, 以 0 开始。 让我们练习一下。定义一个动物列表,然后跟着做后面的练习,你需要写出所指位置的动物名称。如果我用的是“1st, 2nd”等说法,那说明我用的是序数,所以你需要减去 1。如果我给你的是基数(0, 1, 2),你只要直接使用即可。 .. code-block:: python animals = [‘bear’, ‘python’, ‘peacock’, ‘kangaroo’, ‘whale’, ‘platypus’] 1.The animal at 1. 2.The 3rd animal. 3.The 1st animal. 4.The animal at 3. 5.The 5th animal. 6.The animal at 2. 7.The 6th animal. 8.The animal at 4. 对于上述每一条,以这样的格式写出一个完整的句子:“The 1st animal is at 0...