深浅拷贝&文件操作
2019-04-11 10:35:29来源:博客园 阅读 ()
一.深浅拷贝
浅拷贝:拷贝第一层(顶级对象),或者说:父级对象
深拷贝:拷贝所有对象,顶级对象及其嵌套对象,或者说父级对象及其子对象
# 应该每次都拷贝一份(但由于小数据池,未拷贝) v1 = 'alex' import copy v2 = copy.copy(v1) print(id(v1),id(v2)) #同一地址
练习1 impot copy v1 = [1,2,3] v2 = copy.copy(v1) #浅拷贝 print(v1 == v2) # True print(v1 is v2) # False print(v1[0] is v2[0]) # True
练习2
import copy
v1 = [1,2,3,{"name":'武沛齐',"numbers":[7,77,88]},4,5]
v2 = copy.copy(v1)
print(v1 is v2) #False
print(v1[0] is v2[0]) #True
print(v1[3] is v2[3]) #True
print(v1[3]['name'] is v2[3]['name']) #True
print(v1[3]['numbers'] is v2[3]['numbers']) #True
print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) #True
练习3 import copy v1 = [1,2,3,{'k1':123,'k2':456}] v2 = copy.deepcopy(v1) print(v1 == v2) # True print(v1 is v2) # False print(v1[0] is v2[0]) # True print(v1[3] == v2[3]) # True print(v1[3] is v2[3]) # False
练习四
import copy
v1 = [1,2,3,{"name":'武沛齐',"numbers":[7,77,88]},4,5]
v2 = copy.deepcopy(v1)
print(v1 is v2) #False
print(v1[0] is v2[0]) #True
print(v1[3] is v2[3]) #False
print(v1[3]['name'] is v2[3]['name']) #True
print(v1[3]['numbers'] is v2[3]['numbers']) #False
print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) #True
二.文件操作
1. 读 / 写 操作
-
读取: r (read):只能读不能写,文件不存在就报错
?
#打开文件:
object = open('某txt文件',mode = 'r',encoding = '编码')
?
#读取文件所有内容到内存:
content = object.read()
print(content)
#读取文件的所有内容到内存,并按照每一行进行分割到列表中。
content = object.readlines()
print(content)
#如果以后读取一个特别大的文件
for line in object: #一行一行进行读取
line = object.strip() #去除换行
print(line)
?
#关闭内容:
object.close()-
read(): 全部读到内存
-
read(1)
-
1表示一个字符
obj = open('某个txt文件',mode='r',encoding='utf-8')
data = obj.read(1) # 1个字符
obj.close()
print(data) -
1表示一个字节(二进制中)
obj = open('某个txt文件',mode='rb') # b:二进制的意思
data = obj.read(3) # 1个字节
obj.close()
-
-
-
写入:w (write): 只能写不能读(先清空文件),文件不存在就新建
#打开文件:
object = open('某个txt文件或要新建的文件',mode = 'w',encoding = '编码')
?
#写内容:
object.write('xxx')
?
#关闭文件:
object.close()-
write(字符串)
obj = open('某个txt文件或要新建的文件',mode='w',encoding='utf-8')
obj.write('你好')
obj.close() -
write(二进制)
obj = open('某个txt文件或要新建的文件',mode='wb')
?
# obj.write('你好'.encode('utf-8'))
v = '你好'.encode('utf-8')
obj.write(v)
?
obj.close()
-
-
追加; a (append): 只能追加不能读,不存在则新建
#打开文件:
object = open ('某个txt文件或要新建的文件',mode = 'a',encoding = '编码')
?
#写内容:
object.append()
?
#关闭文件
object.close()
2. 其他操作:seek / tell / flush
-
seek(光标字节位置),无论模式是否带b,都是按照字节进行处理。
obj = open('某个txt文件',mode='r',encoding='utf-8')
obj.seek(3) # 跳转到指定字节位置,读取后面内容
data = obj.read()
obj.close()
print(data)
?
obj = open('a.txt',mode='rb')
obj.seek(3) # 跳转到指定字节位置
data = obj.read()
obj.close()
print(data) -
tell(), 获取光标当前所在的字节位置
obj = open('a.txt',mode='rb')
obj.read()
data = obj.tell()
print(data)
obj.close() -
flush,强制将内存中的数据写入到硬盘
v = open('a.txt',mode='a',encoding='utf-8')
while True:
val = input('请输入:')
v.write(val)
v.flush()
v.close()
3 . 关闭文件
-
v = open('a.txt',mode='a',encoding='utf-8')
?
v.close() -
with open('a.txt',mode='a',encoding='utf-8') as v:
data = v.read()
# 缩进中的代码执行完毕后,自动关闭文件
4 .文件内容的修改
-
with open('a.txt',mode='r',encoding='utf-8') as f1:
data = f1.read()
new_data = data.replace('飞洒','666')
?
with open('a.txt',mode='w',encoding='utf-8') as f1:
data = f1.write(new_data) -
大文件修改
f1 = open('a.txt',mode='r',encoding='utf-8')
f2 = open('b.txt',mode='w',encoding='utf-8') #先打开两个文件,再进行操作
for line in f1: # 一行一行进行修改
new_line = line.replace('要被修改的内容','被修改后的内容')
f2.write(new_line)
f1.close()
f2.close()
?
#另一种写法:
with open('a.txt',mode='r',encoding='utf-8') as f1, open('c.txt',mode='w',encoding='utf-8') as f2:
for line in f1:
new_line = line.replace('要被修改的内容','被修改后的内容')
f2.write(new_line)
三.练习:
1.请将user中的元素根据 _ 链接,并写入 'a1.txt' 的文件
user = ['alex','eric'] data = '_'.join(user) object = open('a1.txt',mode = 'w',encoding = 'utf-8') object.write(data) object.close()
2.请将user中的元素根据 | 链接,并写入 'a2.txt' 的文件
user = [ {'name':'alex','pwd':'123'}, {'name':'eric','pwd':'olbody'},] object = open('a2.txt',mode = 'w',encoding = 'utf-8') for item in user: line = '%s|%s\n' %(item['name'],item['pwd']) object.write(line) object.close()
3.请将a2.(根据2)txt中的文件读取出来并添加到一个列表中 ['alex|123','eric|olbody']
方法一: list = [] objecct = open('a2.txt',mode = 'r',encoding = 'utf-8') for line in object: line = line.strip() list.append(line) print(list) 方法二: file_obj = open('a2.txt',mode='r',encoding='utf-8') content = file_obj.read() file_obj.close() content = content.strip() #去除最后一个换行 data_list = content.split('\n') #根据中间的换行进行切割 print(data_list)
原文链接:https://www.cnblogs.com/wenxin1120/p/10666189.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- Python连载25-函数tell&write&writeline$&a 2019-07-24
- Python连载24-函数list&read&seek 2019-07-24
- python中time.strftime不支持中文,报错UnicodeEncodeError: 2019-07-24
- Django源码安装xadmin报错Apps aren't loaded yet. 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash