一、内容回顾

列表的存储:列表里的元素存储的是值的内存地址,就算通过copy,复制后容器里的值也是指向同一个内存地址(跟驻留机制有关)

  1. l1 = [1,2,3,'a','b','c'] #
  2. l2 = l1.copy() #
  3. print(id(l1[-1])) #
  4. print(id(l2[-1])) #

浅copy的类型:列表list,字典dict,集合set

深copy的类型:所有数据类型(但字符串,整型,布尔值无意义,都是同一个内存地址)

二、文件操作初识

  1. f = open('d:\a.txt',encoding='utf-8',mode='r')
  2. # 'd:\a.txt' 文件路径
  3. # encoding='utf-8 编码方式
  4. # 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'

  1. f = open(r'd:\a.txt',encoding='utf-8')

在读写模式下,先读后追加,无论怎么读都是在最后追加,因为读完以后指针在内容的最后位置。

未读就写入,由于指针在最开始位置,写入时先覆盖前面的内容,写入多少覆盖多少

文件操作模式中带b字母的,都是非文字类文件相关的(例如:图片、视频等),b是bytes模式,不需要加编码

  1. f = open('aa.jpg',mode='rb')

读的常用方法:

① read()      # 全部内容读取

  1. f = open(r'd:\a.txt',encoding='utf-8')
  2. str1 = f.read()
  3. print(str1)
  4. f.close()
  5.  
  6. # 结果
  7. 风急天高猿啸哀,渚清沙白鸟飞回。
  8. 无边落木萧萧下,不尽长江滚滚来。
  9. 万里悲秋常作客,百年多病独登台。
  10. 艰难苦恨繁霜鬓,潦倒新停浊酒杯。

②  read(n)    按字符/字节的个数读取

在r或者r+模式下,n指定的是字符个数。

  1. f = open(r'd:\a.txt',encoding='utf-8')
  2. str1 = f.read(12)
  3. print(str1)
  4. f.close()
  5.  
  6. # 结果
  7. 风急天高猿啸哀,渚清沙        # 12个字符

在rb模式下,n指定的是字节个数

  1. f = open(r'd:\a.txt',mode='rb')
  2. str1 = f.read(12)
  3. print(str1)
  4. f.close()
  5.  
  6. # 结果
  7. b'\xef\xbb\xbf\xe9\xa3\x8e\xe6\x80\xa5\xe5\xa4\xa9'      # 12个字节

③ readline()    # 按行读取,只读一行

  1. f = open(r'd:\a.txt',mode='r')
  2. str1 = f.readline()
  3. print(str1)
  4. f.close()
  5.  
  6. # 结果
  7. 风急天高猿啸哀,渚清沙白鸟飞回。

④ readlines()    # 逐行读取,返回一个列表

  1. f = open(r'd:\a.txt',mode='r')
  2. lis = f.readlines()
  3. print(lis)
  4. f.close()
  5.  
  6. # 结果
  7. ['风急天高猿啸哀,渚清沙白鸟飞回。\n', '无边落木萧萧下,不尽长江滚滚来。\n', '万里悲秋常作客,百年多病独登台。\n', '艰难苦恨繁霜鬓,潦倒新停浊酒杯。']

⑤ for 循环

  1. f = open('d1.txt',encoding='utf-8')
  2. for line in f:
  3. print(line.strip())
    f.close()
  4.  
  5. # 结果
  6. 风急天高猿啸哀,渚清沙白鸟飞回。
  7. 无边落木萧萧下,不尽长江滚滚来。
  8. 万里悲秋常作客,百年多病独登台。
  9. 艰难苦恨繁霜鬓,潦倒新停浊酒杯。

机制:内存每次循环只读一条,读下一条的话,上一条就会消失。

四、文件的写模式

w     写模式(只写,不能读)

w+      写读模式(可写、可读)

w+b    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)

wb    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(只写,不能读)

只写(wt)模式下,open()函数做的操作:unicode ==> encode()

  1. f = open('d1.txt',encoding='utf-8',mode='w')
  2. f.write('aaa')
  3. f.close()

① 文件不存在,会创建文件再写入

② 文件已存在,先清空内容再写入

复制文件:先读取文件内容,再一行一行写入另一个文件

  1. f_read = open('d1.txt',encoding='utf-8',mode='r')
  2. f_write = open('d2.txt',encoding='utf-8',mode='w')
  3. for line in f_read:
  4. f_write.write(line)
  5. f_read.close()
  6. f_write.close()

w+ 写读模式,一般不推荐使用,写入后指针在最后,读不出内容,除非手动调整指针

五、文件的追加写模式

a      追加模式(可写、不可读)

a+    可读可追加模式(可写、可读)

ab    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、不可读)

a+b    一般用于操作非文字类文件(文本文件),不建议操作文字类文件(可写、可读)

  1. f = open('d1.txt',mode='a',encoding='utf-8')
  2. f.write('')
  3. f.close()

① 文件不存在,会创建文件再写入

② 文件已存在,将指针移至末尾再写入

六、文件的其他方法

readable()    # 判断文件是否可读

writable()      # 判断文件是否可写

seek()      # 指定指针的位置,按字节来调整指针

  1. f = open('d1.txt',encoding='utf-8')
  2. f.seek(3,0) # 指针从文件的绝对位置(开头)移动3个字节
  3. f.close()

0  代表文件的开头, 1 代表当前位置, 2 代表文件末尾

tell()        # 返回指针的当前位置,字节为单位。受seek、readline、read、readlines影响,不受truncate影响,

truncate()       # 从开头截取按字节数截断,其中win下的换行代表2个字符大小。截断后的所有内容都会被删除。truncate()这个函数跟文件指针位置无关,所以只能在a+和r+的模式下使用。

打开文件的另一种方式:

with open() as f:

  1. with open('d1.txt',encoding='utf-8') as f:

在一定时间内会自动关闭文件,也能同时开启多个文件句柄

  1. with open('d1.txt',encoding='utf-8') as f,open('d2.txt',mode='w',encoding='utf-8') as f1:

七、文件的操作

所有类型的文件修改都是此方式:

① 打开源文件,产生一个文件句柄(读模式)

② 创建一个新文件,产生一个文件句柄

③ 读取源文件内容,进行修改,并将修改后的写入到新文件

④ 将源文件删除

⑤ 将新文件重命名成源文件

  1. import os
  2. with open('d1.txt',encoding='utf-8') as f_read,open('d2.txt',mode='w',encoding='utf-8') as f_write:
  3. for line in f_read:
  4. f_write.write(line)
  5.  
  6. os.remove('d1.txt') # 删除源文件
  7. os.rename('d2.txt','d1.txt') # 文件重命名

Python基础Day8的更多相关文章

  1. python基础 Day8

    python Day8 文件操作的识 利用python代码写一个脚本操作文件的过程 文件的路径:path 打开方式:读,写,追加,读写,写读 编码方式:utf-8,gbk,gb2312 简单文件读取( ...

  2. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  3. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  4. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  5. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

  6. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  7. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  8. 进击的Python【第二章】:Python基础(二)

    Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...

  9. Python之路【第一篇】python基础

    一.python开发 1.开发: 1)高级语言:python .Java .PHP. C#  Go ruby  c++  ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...

随机推荐

  1. 增强篇6 CMOD增强删除

    CMOD实施了一个增强,但是不需要了,怎么删除呢? 要删除PPCO0005 这个增强,进入编辑状态,发现没有删除按钮,  把PPCO0005 这项删除掉 敲回车,厉害了,他又回来了,所以在这里是没法删 ...

  2. LeetCode_387. First Unique Character in a String

    387. First Unique Character in a String Easy Given a string, find the first non-repeating character ...

  3. matplot中的对象

    figure:图表,可以理解为一个空间,二维情况下是一个平面 axes:坐标系,空间中的坐标系,一个空间可以有多个坐标系 axis:坐标轴,坐标系中的一个坐标轴,一个坐标轴只属于一个坐标系 画点:sc ...

  4. k8s中删除pod后仍然存在问题

    分析: 是因为删除了pod,但是没有删除对应的deployment,删除对应的deployment即可 实例如下: 删除pod [root@test2 ~]# kubectl get pod -n j ...

  5. 静态站点生成器-md-hexo

    推荐指数:

  6. Dijkstra算法(朴素实现、优先队列优化)

    Dijkstra算法只能求取边的权重为非负的图的最短路径,而Bellman-Ford算法可以求取边的权重为负的图的最短路径(但Bellman-Ford算法在图中存在负环的情况下,最短路径是不存在的(负 ...

  7. 【GStreamer开发】GStreamer基础教程15——继承Clutter

    目标 Clutter是一个开源的库,用来创建快速.可移植和动态的GUI.GStreamer可以通过cluttersink这个element把clutter集成进来,允许视频像纹理一样使用.本教程会展示 ...

  8. Python机器学习基础教程

    介绍 本系列教程基本就是搬运<Python机器学习基础教程>里面的实例. Github仓库 使用 jupyternote book 是一个很好的快速构建代码的选择,本系列教程都能在我的Gi ...

  9. 使用 RedisDesktopManager 连接redis所需步骤

    服务器开放了6379端口 redis默认配置是只允许本地连接,我们需要修改redis配置文件 配置文件找到 bind 127.0.0.1 这一行注释掉 在找到 protected-mode yes 修 ...

  10. Angular 发布订阅模式实现不同组件之间通讯

    在我们项目中要实现不同组件之间通讯,Angular的@Input和@Output只能实现有父子组件的限制,如果是复杂跨组件实现不同组件可以通过共享变量的方式实现,比如这个博客的思路:https://w ...