python入门100个实例(Python入门经典实例三)
10 类和继承
class Base:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self, x):
self.add(x)
self.add(x)
# Child extends Base
class Child(Base):
def plus(self,a,b):
return a b
oChild =Child()
oChild.add("str1")
print (oChild.data)
print (oChild.plus(2,3))
'''
知识点:
* self:类似Java的this参数
'''
11 包机制
每一个.py文件称为一个module,module之间可以互相导入.请参看以下例子:
# a.py
def add_func(a,b):
return a b
# b.py
from a import add_func
# Also can be : import a
print ("Import add_func from module a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2))
# If using "import a" , then here should be "a.add_func"
module可以定义在包里面.Python定义包的方式稍微有点古怪,假设我们有一个parent文件夹,该文件夹有一个child子文件夹.child中有一个module a.py . 如何让Python知道这个文件层次结构?很简单,每个目录都放一个名为_init_.py 的文件.该文件内容可以为空.这个层次结构如下所示:
parent
--__init_.py
--child
-- __init_.py
--a.py
--b.py
那么Python如何找到我们定义的module?在标准包sys中,path属性记录了Python的包路径.你可以将之打印出来:
import sys
print(sys.path)
通常我们可以将module的包路径放到环境变量PYTHONPATH中,该环境变量会自动添加到sys.path属性.另一种方便的方法是编程中直接指定我们的module路径到sys.path 中:
import sys
import os
sys.path.append(os.getcwd() '\\parent\\child')
print(sys.path)
from a import add_func
print (sys.path)
print ("Import add_func from module a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2)
"'知识点:
· 如何定义模块和包
· 如何将模块路径添加到系统路径,以便python找到它们
· 如何得到当前路径
'''
12 内建帮助手册
对比C ,Java的突出进步是内建Javadoc机制,程序员可以通过阅读Javadoc了解函数用法.Python也内建了一些方便函数以便程序员参考.
· dir函数: 查看某个类/对象的方法. 如果有某个方法想不起来,请敲dir. 在idle里,试试 dir(list)
· help函数: 详细的类/对象介绍. 在idle里, 试试 help(list)
1 遍历文件夹和文件
import os
import os.path
# os,os.path里包含大多数文件访问的函数,所以要先引入它们.
# 请按照你的实际情况修改这个路径
rootdir = " d:/download "
for parent, dirnames, filenames in os.walk(rootdir):
# case 1:
for dirname in dirnames:
print ( " parent is: " parent)
print ( " dirname is: " dirname)
# case 2
for filename in filenames:
print ( " parent is: " parent)
print ( " filename with full path : " os.path.join(parent, filename))
''' 知识点:
* os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
* case1 演示了如何遍历所有目录.
* case2 演示了如何遍历所有文件.
* os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".
'''
2 分割路径和文件名
import os.path
# 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
# 根据你机器的实际情况修改下面参数.
spath = " D:/download/repository.7z "
# case 1:
p,f = os.path.split(spath);
print ( " dir is: " p)
print ( " file is: " f)
# case 2:
drv,left = os.path.splitdrive(spath);
print ( " driver is: " drv)
print ( " left is: " left)
# case 3:
f,ext = os.path.splitext(spath);
print ( " f is: " f)
print ( " ext is: " ext)
'''
知识点: 这三个函数都返回二元组.
* case1 分隔目录和文件名
* case2 分隔盘符和文件名
* case3 分隔文件和扩展名
'''
总结:5个函数
· os.walk(spath)
· os.path.split(spath)
· os.path.splitdrive(spath)
· os.path.splitext(spath)
· os.path.join(path1,path2)
3 复制文件
import shutil
import os
import os.path
src = " d:\\download\\test\\myfile1.txt "
dst = " d:\\download\\test\\myfile2.txt "
dst2 = " d:/download/test/测试文件夹.txt "
dir1 = os.path.dirname(src)
print ( " dir1 %s " % dir1)
if (os.path.exists(src) == False):
os.makedirs(dir1)
f1 = open(src, " w " )
f1.write( " line a\n " )
f1.write( " line b\n " )
f1.close()
shutil.copyfile(src, dst)
shutil.copyfile(src, dst2)
f2 = open(dst, " r " )
for line in f2:
print (line)
f2.close()
# 测试复制文件夹树
try :
srcDir = " d:/download/test "
dstDir = " d:/download/test2 "
# 如果dstDir已经存在,那么shutil.copytree方法会报错!
# 这也意味着你不能直接用d:作为目标路径.
shutil.copytree(srcDir, dstDir)
except Exception as err:
print (err)
'''
知识点:
* shutil.copyfile:如何复制文件
* os.path.exists:如何判断文件夹是否存在
* shutil.copytree:如何复制目录树
'''
总结:4个函数
· os.path.dirname(path)
· os.path.exists(path)
· shutil.copyfile(src, dst)
· shutil.copytree(srcDir, dstDir)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com