Python基础Day8
一、内容回顾
列表的存储:列表里的元素存储的是值的内存地址,就算通过copy,复制后容器里的值也是指向同一个内存地址(跟驻留机制有关)
l1 = [1,2,3,'a','b','c'] #
l2 = l1.copy() #
print(id(l1[-1])) #
print(id(l2[-1])) #
浅copy的类型:列表list,字典dict,集合set
深copy的类型:所有数据类型(但字符串,整型,布尔值无意义,都是同一个内存地址)
二、文件操作初识
f = open('d:\a.txt',encoding='utf-8',mode='r')
# 'd:\a.txt' 文件路径
# encoding='utf-8 编码方式
# mode='r' 操作方式(模式)
open() 是python的内置函数,内部调用当前系统的系统命令
f 是文件接收的变量,即文件句柄
文件路径:分为绝对路径和相对路径
绝对路径:从根目录 例如:d:\aaa\a.txt
相对路径:从当前目录或者当前文件夹 例如: a.txt
编码方式:utf-8,gbk,gb2312等
操作方式:只读、只写、读写、写读、追加等
操作步骤:
① 打开文件,产生文件句柄
② 对文件句柄进行操作
③ 关闭文件句柄
报错:
① 编码不一致,存储文件时编码与打开文件时编码不一致
② 路径文件
解决路径问题的方式:a 在文件路径前加r 例如:r'd:\a.txt'
b 所有的 \ 都改为 \\
三、文件的读模式
r 只读模式(只读)
r+ 读写模式(可读、可写)
r+b 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可读、可写)
rb 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(只读)
以文本模式打开时,只读(rt)模式下,open()函数做的操作:bytes ==> decode('utf-8') ==> str。
只读模式下,mode='r 可以省略,因为open的函数默认的模式是mode='r'
f = open(r'd:\a.txt',encoding='utf-8')
在读写模式下,先读后追加,无论怎么读都是在最后追加,因为读完以后指针在内容的最后位置。
未读就写入,由于指针在最开始位置,写入时先覆盖前面的内容,写入多少覆盖多少
文件操作模式中带b字母的,都是非文字类文件相关的(例如:图片、视频等),b是bytes模式,不需要加编码
f = open('aa.jpg',mode='rb')
读的常用方法:
① read() # 全部内容读取
f = open(r'd:\a.txt',encoding='utf-8')
str1 = f.read()
print(str1)
f.close() # 结果
风急天高猿啸哀,渚清沙白鸟飞回。
无边落木萧萧下,不尽长江滚滚来。
万里悲秋常作客,百年多病独登台。
艰难苦恨繁霜鬓,潦倒新停浊酒杯。
② read(n) 按字符/字节的个数读取
在r或者r+模式下,n指定的是字符个数。
f = open(r'd:\a.txt',encoding='utf-8')
str1 = f.read(12)
print(str1)
f.close() # 结果
风急天高猿啸哀,渚清沙 # 12个字符
在rb模式下,n指定的是字节个数
f = open(r'd:\a.txt',mode='rb')
str1 = f.read(12)
print(str1)
f.close() # 结果
b'\xef\xbb\xbf\xe9\xa3\x8e\xe6\x80\xa5\xe5\xa4\xa9' # 12个字节
③ readline() # 按行读取,只读一行
f = open(r'd:\a.txt',mode='r')
str1 = f.readline()
print(str1)
f.close() # 结果
风急天高猿啸哀,渚清沙白鸟飞回。
④ readlines() # 逐行读取,返回一个列表
f = open(r'd:\a.txt',mode='r')
lis = f.readlines()
print(lis)
f.close() # 结果
['风急天高猿啸哀,渚清沙白鸟飞回。\n', '无边落木萧萧下,不尽长江滚滚来。\n', '万里悲秋常作客,百年多病独登台。\n', '艰难苦恨繁霜鬓,潦倒新停浊酒杯。']
⑤ for 循环
f = open('d1.txt',encoding='utf-8')
for line in f:
print(line.strip())
f.close()
# 结果
风急天高猿啸哀,渚清沙白鸟飞回。
无边落木萧萧下,不尽长江滚滚来。
万里悲秋常作客,百年多病独登台。
艰难苦恨繁霜鬓,潦倒新停浊酒杯。
机制:内存每次循环只读一条,读下一条的话,上一条就会消失。
四、文件的写模式
w 写模式(只写,不能读)
w+ 写读模式(可写、可读)
w+b 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)
wb 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(只写,不能读)
只写(wt)模式下,open()函数做的操作:unicode ==> encode()
f = open('d1.txt',encoding='utf-8',mode='w')
f.write('aaa')
f.close()
① 文件不存在,会创建文件再写入
② 文件已存在,先清空内容再写入
复制文件:先读取文件内容,再一行一行写入另一个文件
f_read = open('d1.txt',encoding='utf-8',mode='r')
f_write = open('d2.txt',encoding='utf-8',mode='w')
for line in f_read:
f_write.write(line)
f_read.close()
f_write.close()
w+ 写读模式,一般不推荐使用,写入后指针在最后,读不出内容,除非手动调整指针
五、文件的追加写模式
a 追加模式(可写、不可读)
a+ 可读可追加模式(可写、可读)
ab 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、不可读)
a+b 一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)
f = open('d1.txt',mode='a',encoding='utf-8')
f.write('')
f.close()
① 文件不存在,会创建文件再写入
② 文件已存在,将指针移至末尾再写入
六、文件的其他方法
readable() # 判断文件是否可读
writable() # 判断文件是否可写
seek() # 指定指针的位置,按字节来调整指针
f = open('d1.txt',encoding='utf-8')
f.seek(3,0) # 指针从文件的绝对位置(开头)移动3个字节
f.close()
0 代表文件的开头, 1 代表当前位置, 2 代表文件末尾
tell() # 返回指针的当前位置,字节为单位。受seek、readline、read、readlines影响,不受truncate影响,
truncate() # 从开头截取按字节数截断,其中win下的换行代表2个字符大小。截断后的所有内容都会被删除。truncate()这个函数跟文件指针位置无关,所以只能在a+和r+的模式下使用。
打开文件的另一种方式:
with open() as f:
with open('d1.txt',encoding='utf-8') as f:
在一定时间内会自动关闭文件,也能同时开启多个文件句柄
with open('d1.txt',encoding='utf-8') as f,open('d2.txt',mode='w',encoding='utf-8') as f1:
七、文件的操作
所有类型的文件修改都是此方式:
① 打开源文件,产生一个文件句柄(读模式)
② 创建一个新文件,产生一个文件句柄
③ 读取源文件内容,进行修改,并将修改后的写入到新文件
④ 将源文件删除
⑤ 将新文件重命名成源文件
import os
with open('d1.txt',encoding='utf-8') as f_read,open('d2.txt',mode='w',encoding='utf-8') as f_write:
for line in f_read:
f_write.write(line) os.remove('d1.txt') # 删除源文件
os.rename('d2.txt','d1.txt') # 文件重命名
Python基础Day8的更多相关文章
- python基础 Day8
python Day8 文件操作的识 利用python代码写一个脚本操作文件的过程 文件的路径:path 打开方式:读,写,追加,读写,写读 编码方式:utf-8,gbk,gb2312 简单文件读取( ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python小白的发展之路之Python基础(一)
Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...
- Python之路3【第一篇】Python基础
本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...
- 进击的Python【第三章】:Python基础(三)
Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...
- 进击的Python【第二章】:Python基础(二)
Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
随机推荐
- Python - Django - ORM 查询方法
models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key ...
- 透过SourceTree再谈Git
初出茅庐之基础篇 1. Download SourceTree from: https://www.sourcetreeapp.com/ 2.Complete the installation. 3. ...
- Linq中demo,用力看看吧
本文导读:LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能.Linq中where查询与SQL命令中的Where作用相似,都是起到范围限定 ...
- Nginx日志挂载目录为nfs文件服务器时开机无法自启动的问题解决
为了方便收集查看日志把nginx日志输出至nfs文件服务器,nfs文件服务器使用autofs自动挂载,nginx和autofs都使用systemctl设置了开机自启动. 但是在重启主机的时候nginx ...
- WPF ComboBox(转)
WPF ComboBox 创建一个ComboBox控件,并设置ComboBox控件的名称,高度,宽度.及设置ComboBox的垂直和水平对齐. <ComboBox Name="Comb ...
- SPSS 习题-2
1.有关SPSS数据字典的说法,正确的是: AA. SPSS 数据集的数据字典可以复制到其他数据集中B. SPSS数据集的数据字典是不能复制的C. SPSS的数据字典可以通过“复制”和“粘贴”在不同 ...
- 干货 | 20多门AI网络课程资源(附链接+PDF)
现如今,在火爆的人工智能领域,面临的最窘迫的问题是越来越庞大的产业规模和国家每年约500万的相关人才需求的矛盾.广阔的发展前景.巨大的人才缺口和令人心动的行业薪资,让越来越多的年轻人选择了进入这一行业 ...
- C++ STL-bitset
1.bitset的声明 #include <bitset> using std::bitset; 2.bitset对象的定义和初始化 可以如下声明一个该类型变量: bitset ...
- python基础篇(三)
PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...
- SQL语言的分类(DQL、DML、DDL、DCL的概念与区别)
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...