前言:
这里是记录一些本人在开发过程中遇到的一些细节问题,与君共勉。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] result = list(itertools.permutations(a, 9))
如果是我们自己来写全排列逻辑,可以是下面这样的:
# get full permutation list def full_permutation(l): if(len(l) <= 1): return [l] r = [] for i in range(len(l)): s = l[:i] + l[i + 1:] # 将l的前三项以及l的第i+1后的字串赋给s p = full_permutation(s) for x in p: r.append(l[i : i + 1] + x) return r所有在项目中还是建议使用Python内建的全排列函数,其中的第二个参数可以是1-9之间的任何一个整数,非常方 便。
import os import os.path rootdir = '/root/coding/python/raw' for parent, dirnames, filenames in os.walk(rootdir): for dirname in dirnames: # print 'parent: ' + parent print 'dirname: ' + dirname for filename in filenames: # print 'parent: ' + parent # print 'filename: ' + filename print 'file: ' + os.path.join(parent, filename)
如果你有其他语言的编程功底,可能你已对进制转化十分熟悉。不过我这里要说的进制转化可不是简单从十进制转化为二进制或是转成十六进制。下面你可以试着来解决下面几个问题:
a.将a = 'ff'的十六进制数转成十进制的255
b.将a = 14的十进制数转成十六进制的0e
解决方法:
a.这里需要用一个参数指明原来的进制数
decstr = int(a, 16)
b.这里需要用一个切片操作用来去掉前缀'0x'
decstr = hex(a)[2:] if len(decstr) % 2 == 1: decstr = '0' + decstr
首先需要import两个模块:socket和struct
1.将ip1 = '172.123.156.241'转化为ip2 = 2893782257L
ip2 = socket.ntohl(struct.unpack("I",socket.inet_aton(ip1))[0])
2.将ip2 = 2893782257L转化为ip1 = '172.123.156.241'
ip1 = socket.inet_ntoa(struct.pack('I',socket.htonl(ip2)))
可以通过两种方式来解决这个问题,分别如下:
方法一:
import subprocess import os output = os.popen('cat /proc/cpuinfo | grep model') print output.read()
方法二:
status, model = commands.getstatusoutput(shell) print model
有时我们遍历一个可迭代的参数时,需要知道此时已经遍历到第几个了。为了不用麻烦地在for循环外面另外定义变量,这里你可以使用enumerate这样来做:
今天我在解析HTML文件的时候,出现了如下的错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 1: ordinal not in range(128)
解决方法:
只要在代码中添加如下代码即可:
import sys reload(sys) sys.setdefaultencoding('utf8')
在为Python安装MySQLdb模块时,出现以上的错误信息。解决方法如下:
# yum install python-devel mysql-devel zlib-devel openssl-devel