os.getcwd() 返回当前目录
>>> os.getcwd()
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32'
os.listdir(directory) 返回directory目录中的文件名和子目录列表
>>> a = os.getcwd()
>>> os.listdir(a)
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python36.dll', 'pythonw.exe', 'README.txt', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']
os.stat(path) 返回一个元组,关于文件的信息
st_mode:文件的访问权限
st_ino:节点数(UNIX)
st_dev:设备号
st_nlink:链接号(UNIX)
st_uid:所有者的用户id
st_gid:所有者的组id
st_size:文件的大小
st_atime:最后访问时间
st_mtime:最后修改时间
st_ctime:创建时间
>>> b = os.listdir(a)
>>> os.stat(b[1])
os.stat_result(st_mode=16895, st_ino=281474976800257, st_dev=3537546670, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1486357558, st_mtime=1486357558, st_ctime=1486357558)
os.path.split(path) 将路径分割为符合当前操作系统的组成名称。返回一个元组
>>> os.path.split(a)
('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python', 'Python36-32')
其实就是将最后的文件或者目录分割开
os.path.join(components) 将名称链接成符合当前操作系统的路径,
os.path.normcase(path) 规范化路径的大小写。unix下文件名是区分大小写的,所以没影响,但是在windows下,操作系统在比较文件名的时候是忽略大小写的。在windows下,会返回一个全小写的路径。
os.walk(top, topdown = True, onerror = None, followlinks = False)
可以自上而下或者自下而上迭代目录树。对每个目录,创建一个由dirpath、dirnames、filenames组成的三元组。
dirpath部分是一个保存目录路径的字符串。
dirnames部分是dirpath中子目录的列表,不包括"."和".."。
filenames是dirpath中每个非目录文件的一个列表。
找到某个目录下所有的pdf文件:
#!/usr/bin/env python 3.6
import os, os.path #os系统相关的模块
import re #正则表达式的模块
def print_pdf(root, dirs, files):#找到pdf文件,打印出来
for file in files:
path = os.path.join(root, file)
path = os.path.normcase(path) #拼凑一个完整的路径出来
if re.search(r".*\.pdf", path): #看看是不是pdf文件
print(path)
#对当前目录进行遍历,并搜索pdf文件
for root, dirs, files in os.walk('.'):
print_pdf(root, dirs, files)
正则表达式的简单实用例子:
import re #引入正则表达式的模块
#创建一个字符串元组供搜索
s = ('xxx','abcxxxabc','xyx','abc','x.x','axa','axxxxa','axxya')
a = filter((lambda s: re.match(r"xxx",s)), s)#match 完全匹配
print(*a) #xxx
a = filter((lambda s: re.search(r"xxx",s)), s)#search 搜索
print(*a) #xxx abcxxxabc axxxxa
a = filter((lambda s: re.search(r"x.x",s)), s)#search 搜索,'.'匹配任意字符
print(*a) #xxx abcxxxabc xyx x.x axxxxa
a = filter((lambda s: re.search(r"x\.x",s)), s)#search 搜索,'\.'就是.了
print(*a) #x.x
a = filter((lambda s: re.search(r"x.*x",s)), s)#search 搜索,*匹配任意次数
print(*a) #xxx abcxxxabc xyx x.x axxxxa axxya
a = filter((lambda s: re.search(r"x.+x",s)), s)#search 搜索,+至少出现一次
print(*a) #xxx abcxxxabc xyx x.x axxxxa
a = filter((lambda s: re.search(r"c+",s)), s)#search 搜索,至少有一个c
print(*a) #abcxxxabc abc
#用[]表示要匹配的特殊字符集,用^表示非
#要用^和$在开头和结尾表示从头到尾不包含c字符
a = filter((lambda s: re.search(r"^[^c]*$",s)), s)#search 搜索,至少有一个c
print(*a) #xxx xyx x.x axa axxxxa axxya