python day07笔记总结
2019.4.4 S21 day07笔记总结
一、深浅拷贝
1.copy.copy() 浅拷贝
deep.copy() 深拷贝
2.一般情况
1.str/int/bool 是不可变类型,他们的深浅拷贝都是一样的,就是在内存中新开辟空间来存储。
应该每次都拷贝一份,但由于小数据池,未拷贝,所有存储地址一样。
2.list/dict/set 是可变类型
浅拷贝:只拷贝到第一层(即空壳,里面元素的地址不会改变。)
深拷贝:拷贝所有数据(可变的)(找到所有可变层的数据层拷贝一份,里面可变层的地址也会改变。
应该每次都拷贝一份,地址不一样(但由于小数据池,未拷贝)。
只有出现嵌套时,深拷贝才有意义,没有时就和浅拷贝的意义一样(只拷贝第一层)。
总结:浅拷贝:只拷贝到第一层
深拷贝:拷贝嵌套层次中所有的可变类型(可变就拷贝,不可变就不拷贝)。
3.特殊情况
a.元组不可变
例:v1 = (1,2,3)
imfort copy
v2 = copy.copy(v1)
print(id(v1),id(v2)) # v1、v2地址一样
v3 = copy.deepcopy(v1)
print(id(v1),id(v3)) # v1、v3地址一样
b.元组不可变,但元组中的列表/字典/集合都是可变的,元组中就存在了可变类型。
例:v1 = (1,2,3,[1,2,3],4)
imfort copy
v2 = copy.copy(v1)
print(id(v1),id(v2)) # v1、v2地址一样
v3 = copy.deepcopy(v1)
print(id(v1),id(v3)) # v1、v3地址不一样
元组中有可变的,深拷贝拷贝到可变层。
总结:拷贝只针对可变类型:再创造一份
不可变类型不会拷贝(再创造一份出来,都是用同一个地址~同时指向一个地址)
二、文件操作
1.打开
1.读取 r
打开文件
file_object = open('log.txt',mode = 'r',encoding = 'utf-8')
'# log.txt' 文件路径 encoding = 'utf-8' 存储时的方式,用什么方式存储就用什么方式读取
读取内容
content= file_object.read()
print(content)
关闭文件
file_object.close()
r 只读不能写,文件不存在则报错。
2.写入 w
打开文件
file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
写入内容
file_object.write('李忠伟')
关闭文件
file_objet.close()
w 只写不能读
w 要慎重使用,使用 w 打开文件时是先清空文件再写入内容的。一般用于新建文件(文件不存在则新建)。
3.追加 a
打开文件
file_object = open('log.txt',mode = 'a',encoding = 'utf-8')
写内容
file_object.write('你好')
关闭文件
file_objet.close()
a 只追加不能读,只在文件内容的最后面追加。
文件不存在则新建
4.可读可写 r+
打开文件
file_object = open('log.txt',mode = 'r+',encoding = 'utf-8')
file_object.seek(3) # 把光标移到第3个字节的位置
file_object.write('999')
读取内容
content= file_object.read()
print(content)
file_object.write('666')
关闭文件
file_object.close()
1.读取
2.写入时:根据光标的位置,从当前光标位置开始进行写入操作(可能会将光标后其他的文字覆盖)
5.可读可写 w+
file_object = open('log.txt',mode = 'w+',encoding = 'utf-8')
data = file_object.read()
print(data) # 文件是空的
file_object.write('alex') # a
file_object.seek(0) # b
file_object.read() # c
'# a+b+c这三步:a 写完后光标在最后面,想要进行 c 读取,需要在 c 前加入 b 将光标跳到0
print(data)
file_object.close()
写入时会将文件清空,读取时需要调整光标的位置。
6.可读可写 a+
file_object = open('log.txt',mode = 'a+',encoding = 'utf-8')
file_object.seek(0)
data = file_object.read()
print(data)
file_object.seek(0)
file_object.write('666')
file_object.close()
7.总结:
r 只能读 (* *)
w 只能写 (* *)
a 只能追加 (*)
r+
读:默认从0的光标开始读,也可以通过seek调整光标的位置。
写:从光标所在的位置开始写,也可以通过seek调整光标的位置。
w+
读:默认光标永远在写入的最后或0(打开清空了还没写入时在0的位置),也可以通过seek调整光标的位置。
写:先清空
a+
读:默认光标在最后,也可以通过seek调整光标的位置,然后再去读取。
写:永远写到最后
2.操作
1.读操作
file_object = open('log.txt',mode = 'r',encoding = 'utf-8')
data = file_object.read() # 读取文件的所有内容到内存
data = file_object.read(2) # 从当前光标所在的位置向后读取文件两个字符
data_list = file_object.readlines() # 读取文件的所有内容到内存,并按照每一行进行分割到列表中。 (每行结尾会隐藏着一个换行符 \n)
如果以后读取一个特别大的文件:
方式一:start = 0
while True:
data = file_object.read(2)
print(data)
file_object.close() # 最后一直在循环空,终止条件不好设定。
方式二:for line in file_object:
line = line.strip() # 打印完后每行都存在一个换行符,strip 不但能去除空白,也能去除换行符\n
print(line) (*****)
2.写操作
file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
file_object.write('你好') # '你好小黑'写在一行
file_object.write('你好\n') # '你好' 与 '小黑' 写成两行
file_object.write('小黑')
file_object.close()
写完后一定要记得关闭(close)文件,如果没关闭就相当于写的东西直接到内存了。
关闭文件(close)就强制将内存刷到硬盘上了
总结:文件操作和数据类型的结合使用
python day07笔记总结的更多相关文章
- Web Scraping with Python读书笔记及思考
Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python datetime笔记
python datetime笔记 http://mint-green.diandian.com/post/2011-09-09/4892024 获取当前时间,并通过字符串输出. 格式为:%Y-%m- ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门0 安装dangjo
经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
随机推荐
- Java Web开发Session超时设置
在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...
- 简单的爬虫爬的完整的<img>标签,修改正则即可修改爬取内容
简单的爬虫爬的完整的<img>标签,生成<img>标签结果文件与爬虫经历的网页. <?php/** 从给定的url获取html内容** */function _getUr ...
- IIS应用程序池权限与虚拟目录身份验证权限
IIS应用程序池用户权限决定了IIS进程对资源的访问权限.例如在服务器aspx代码中修改web.config或者在某个目录写入文件,就需要应用程序池用户对指定文件或目录修改权限. 虚拟目录身份验证权限 ...
- python学习笔记八(集合)
集合 set是一个无序的不重复元素序列. 用大括号或set()函数创建集合.注意:创建一个空集合用set(),不用{},{}用来创建空字典 basket = {'apple','orange','ap ...
- rocketmq (一)运行原理以及使用问题
使用消息中间件可以解决高并发,那是因为消息中间件可以将消息缓存到队列之中. 但是 当消息 过多的时候,几万,几十万...消息中间件也可能会宕机,所以我们可以对消息中间件进行集群,在之前的activem ...
- IOC注入框架——Unity中Web.Config文件的配置与调用
Unity 应用程序块可以从 XML 配置文件中读取配置信息.配置文件可以是 Windows Forms 应用程序的 App.config 或者 ASP.NET 应用程序的 Web.config.当然 ...
- 一、新建springBoot项目
三种方式新建SpringBoot项目: 官网, myeclipse, idea 1.官方网站新建(https://start.spring.io/) 1)打开官网,选择自己需要的springBo ...
- 卸载npm
npm uninstall npm -g yum remove nodejs npm -y
- 微信小程序web-view的简单思考和实践
微信小程序的组件web-view推出有一段时间了,这个组件的推出可以说是微信小程序开发的一个重要事件,让微信小程序不会只束缚在微信圈子里了,打开了一个口子,这个口子或许还比较小,但未来有无限可能. 简 ...
- VS2017 ASP.NET MVC 5.0 开部署问题汇总
1[SqlException (0x80131904): 拒绝了对对象 '****' (数据库 '***',架构 'dbo')的 EXECUTE 权限.] “/”应用程序中的服务器错误. SQL 20 ...