python学习笔记(五)深拷贝浅拷贝,文件和目录


python学习笔记(五)
 
深拷贝-浅拷贝
 
浅拷贝就是对引用的拷贝(只拷贝父对象)
深拷贝就是对对象的资源拷贝
 
普通的复制,只是增加了一个指向同一个地址空间的”标签“,东西都是一样的,改变或者增加,复制出来的变量也会改变
例子:
>>> a=[1,2,3]
>>> b=a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> a[1]=0
>>> a
[1, 0, 3]
>>> b
[1, 0, 3]
>>> a.append(4)
>>> a
[1, 0, 3, 4]
>>> b
[1, 0, 3, 4]
 
浅拷贝
要加入copy模块 import copy
浅拷贝数据不会独立的在复制一份,只是对引用的拷贝,每个元素的id都是一样的
例子:
>>> import copy
>>> a=[1,2,['a','b','c']]
>>> b=copy.copy(a)
>>> b
[1, 2, ['a', 'b', 'c']]
>>> id(a)
48145736L
>>> id(b)
48123592L
>>> id(a[0])
30730152L
>>> id(b[0])
30730152L
>>> a.append(0)
>>> a
[1, 2, ['a', 'b', 'c'], 0]
>>> b
[1, 2, ['a', 'b', 'c']]
>>> a[2].append('d')
>>> a
[1, 2, ['a', 'b', 'c', 'd'], 0]
>>> b
[1, 2, ['a', 'b', 'c', 'd']]
 
深拷贝
只用把copy.copy()改成copy.deepcopy()
深拷贝会把所有的数据都单独的在拷贝一份
 
文件的读写
 
可以用open函数,或者file类
 
open(name[, mode[, buffering]])
file(name[, mode[, buffering]])
[python] view plaincopy在CODE上查看代码片派生到我的代码片
fo = open("/code/1.txt")  #使用open函数  
print fo.read()  
fo.close()  
  
f1 = file("/code/1.txt")  #使用file类  
print f1.read()  
f1.close()  
 
mode
r    只读
r+  读写,如果已经存在,则从文件指针位置写入
w   写入,如果已经存在,先删除原文件,在重新写入
w+ 读写,如果已经存在,先删除原文件,在重新写入
a    写入,在文件末尾追加新内容
a+  读写,在文件末尾追加新内容
b    打开二进制文件。可以于r、w、a、+结合使用
U   支持所有的换行符号。“\r” "\n"  "\r\n"
 
例子:写入
[python] 
#/usr/bin//usr/bin/python2.7  
# -*- coding: utf-8 -*-  
fnew = open('/code/new.txt','w')  
fnew.write('Hello Python!!')  #这时2还没有真正的写到文件中去,只是在缓冲中 ,close或者flush后才写到文件中去  
fnew.close()  
 
文件对象方法
 
String = FileObject.read([size])  读取,从文件指针开始读取,可以size指定读取多少
String = FileObject.readline([size])  每次读取一行,并将文件文件指针到下一行
List = FileOject.readlines([size])  返回一个列表,存放没一行的字符
FileObject.next()  返回当前行,并将文件文件指针到下一行 与readline不同的地方是,readline把所有行读完后返回空字符串,next会发出警告
 
FileObject.write(String) 写入
FileObject.writelines(list)  多行写入,效率比write高,速度快
 
FileObject.seek(偏移量,选项)
选项 = 0 将文件指针移到 文件头部+偏移量处
选项 = 1 将文件指针移到 当前位置+偏移量处
选项 = 2 将文件指针移到 末尾 - 偏移量处
FileObject.flush()  提交更新,将缓冲写到文件中去
 
例子:查找
[python]  
import re  
fp = file('1.txt','r')  
count = 0  
for s in fp.readlines():  
      li = re.findall('hello',s)  
      if len(li)>0:  
            count = count + len(li)  
print "Search "+str(count) + " hello"  
  
fp.close()  
 
例子:替换
[python]  
# -*- coding: utf-8 -*-  
import re  
fp = file('1.txt','r+')  
s=fp.read()  
fp.seek(0,0)  
fp.truncate()    #文件清空  
fp.write(s.replace('hello','hi'))  
fp.close()  
 
OS模块
 
引入os模块 import os
 
目录操作
通过os模块来实现目录的创建,修改,遍历等
创建目录(不能创建多级目录)  os.mkdir(path [, mode=0777])
创建目录(可以创建多级目录)  os.makedirs(path [, mode=0777])
删除目录(不能删除多级目录)  os.rmdir(path)
删除目录(可以删除多级目录)  os.removedirs(path)
列出目录 os.listdir(path) 
获取当前目录  os.getcwd()
切换目录  os.chdir(path)

评论关闭