2016年5月30日星期一

windows下为python安装*.whl

给我一个Terminal,我可以创造一个世界。

给我一台windows,我只能活在盖茨的世界里。

环境win7 64bit,python2.7,怎么安装.whl的拓展包呢?什么环境变量,pip的都不用管了,只需要cmd下一句话,

python -m pip install ***********.whl


就可以啦

2016年5月9日星期一

python遍历文件夹小结

下面来小结一下Python遍历文件夹的几种方法。

方法1:使用os.listdir
import os
for filename in os.listdir('c:\windows'):
    print filename

本结果直接输出当前根目录下的所有名字,即文件夹名和文件名,并没有进入子文件夹,同时并不包括文件路径,格式如下,

dsdkljsalkdjsalk.txt
ndskdkewjdkj.doc
folder1
folder2

- 对于想输出特定目录下的文件名/文件夹名,可以再加入条件判断,

os.path.isfile(root+filename)
os.path.isdir(root+filename)

这样加以筛选就可以只输出当前路径下所有文件名,或者当前路径下所有文件夹名。

- 如果你想按照特定顺序排列,如modified或者created time,需对当前排序。

假定当前的所有文件名都存在在某list1内,形如,

    for filename in os.listdir(folder):
        if(os.path.isfile(folder+filename)):
            list1.append(os.path.join(folder, filename))

    sorted_list1 =  sorted(matches, key=os.path.getmtime)

只需在sorted里加入key即可,这里的key是os.path.getmtime,文件的更改时间,
os.path.getatime是最近访问时间,os.path.getctime是创建时间。

*注意,这里的list1中os.path.join()方法用于组建新的路径名,我们除了filename,还加入了这些文件的当前路径。这里的folder路径不能去掉,否则笨蛋的程序凭借光杆文件名不会定位到我们的文件位置。

- 问题又来了,我们得到的经过排序的sorted_list1里还包含了路径名,这样大煞风景,怎么办呢?  用split!

    for name in sorted_matches:
        name_complet.append(name.split("/")[-1])

这里巧妙地割出-1个“/”的字符串,即左起第一个“/”前的字段,就是我们的完整文件名啦。

 
方法2:使用glob模块,可以设置文件过滤

import glob
for filename in glob.glob('c:\windows\*.exe'):
    print filename

本方法很方便筛选特定格式的文件。
 

方法3:通过os.path.walk递归遍历,可以访问子文件夹

import os.path
def processDirectory ( args, dirname, filenames ):
    print 'Directory',dirname
    for filename in filenames:
        print ' File',filename
 
os.path.walk('c:\windows', processDirectory, None )

这是使用最多的方法,可以递归进入子文件夹,从而实现某目录所有文件遍历的效果。
 
方法4:非递归

#!/bin/python
#
#site:www.jbxue.com
import os
for dirpath, dirnames, filenames in os.walk('c:\\winnt'):
    print 'Directory', dirpath
    for filename in filenames:
        print ' File', filename