day-08-文件管理
文件的操作的初识
利用python代码写一个很low的软件,去操作文件。
文件路径:path
打开方式:读,写,追加,读写,写读......
编码方式:utf-8,gbk ,gb2312......
f1 = open('d:\联系方式.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
# 输出:
练习方式:123456open:内置函数,open底层调用的是操作系统的借口。
f1是变量,也叫文件句柄。对文件进行的任何操作,都得通过文件句柄。
encoding:可以不写,不写参数,默认的编码本:操作系统默认的编码
Windows:gbk
Linux:utf-8
mac:utf-8
f1.close():关闭文件句柄,不然会一直占用内存。
文件操作三部曲
打开文件
对文件句柄进行相应的操作
关闭文件
报错原因:
UnicodeDecodeError:文件储存时与文件打开时编码运用不一致。
第二个错误:路径分隔符产生的问题:加个 r
r'C:\Users\YS\Desktop\联系方式.txt'
文件操作的读
(1)r 模式:读取得数据类型是 str ,操作的是文本文件
read(n) :读几个字符 ,n不写默认全读
f = open('文件的读.txt',encoding='utf-8')
content = f.read(5)
print(content)
f.close()
# 输出
读读读读readline():读几行,写几遍,读几行
f = open('文件的读.txt',encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
# 输出
读读读读
aaaa
ABCDreadlines():返回一个列表,列表中的每个元素是源文件的每一行。
f = open('文件的读.txt',encoding='utf-8')
content = f.readlines()
print(content)
f.close()
# 输出
['读读读读\n', 'aaaa\n', 'ABCD\n', '!@#¥']for 读取,和 for 循环 readlines 一样的输出效果
但是 for 读取始终占用一行的内存,对于大数据的读取 readlines 因为他会生成一个字典,会一下把内存给占满(几十个G的数据)
f = open('文件的读.txt',encoding='utf-8')
for lin in f:
print(lin)
f.close()
# 输出
读读读读
aaaa
ABCD
!@#¥模式
(2)rb模式:
操作的是非文本的文件,图片,视频,音频。rb 模式读取的数据类型为 bytes
读取方式和 r 是样的
read(),readline(),readlines(),forf = open('LOL.png',mode='rb')
conten = f.read() # 方式和 r 模式是一样的
print(conten)
f.close()
# 输出的是bytes数据格式
b'\x89PNG\r\n\x1a\n........'
文件操作的写
(1)w 模式:
有关写(w)的清空的问题:关闭文件句柄,再次以 w 模式打开此文件时才会清空
write()
# 没有文件,创建文件,写入内容,在当前目录下。
f = open('文件的写', encoding='utf-8', mode='w') # ’文件的写‘为文件名
conten = f.write('随便写一点。。。')
f.close()
# 如果文件存在,先清空原文件内容,在写入新内容
f = open('文件的写', encoding='utf-8', mode='w')
conten = f.write('多写一点。。。')
f.close()
(2)wb 模式,操作非文本文件
f = open('LOL.jpg', mode='rb')
content = f.read() # 先获取一个bytes格式的数据
f.close()
# 没有文件,创建文件,写入内容 写入数据格式为bytes(非Unicode编码)在当前目录下
f1 = open('LOL2.jpg', mode='wb')
content1 = f1.write(content)
f1.close()
文件操作的追加
(1)a 模式
# 没有文件创建文件,追加内容,有文件就直接在原文件的最后面追加。
f = open('文件的追加', encoding='utf-8', mode='a')
content = f.write('追加一点。。。。')
f.close()
文件操作的其他模式
(1)r+ 模式:文件的读和写,先读后写,读一个光标往后移一个,写在最后面光标所在的位置,(读并追加)
# 读并追加 顺序不能错,不能创建
f = open('文件的读写',encoding='utf-8',mode='r+')
content = f.read() # 先读
print(content)
f.write('随便写一点。。。') # 后追加
文件操作的其他功能
总结:
三个大方向:
读,四种模式: r rb r+ r+b
写,四种模式: w wb w+ w+b
追加:四种模式:a ab a+ a+b
相应的功能:对文件句柄的操作:read,raed(n),readline(),readlines(),write()
tell():方法获取光标的位置,单位是字节。
f = open('文件的读写', encoding='utf-8')
print(f.tell()) # 获取读之前光标所在的位置为 0
content = f.read() # 读,读一个字符光标往后移一个字符
print(f.tell()) # 获取读之后光标所在的位置为 30
print(content)
# 输出
0
30
随便写一点点点点点点seek():调整光标的位置
f = open('文件的读写',encoding='utf-8')
f.seek(6) # 把光标的位置调整到第6个字节
print(f.tell()) # 获取光标的位置为为6
content = f.read() # 从光标调整的位置开始读:写一点点点点点点
print(f.tell()) # 获取光标读之后的位置为30
# 输出
6
30
写一点点点点点点flush:强制刷新,相当于保存。
f = open('文件的读写', encoding='utf-8', mode='w')
content = f.write('追加一点。。。。')
f.flush() # 保存一下,Python会自动保存,有些不会
f.close() # 退出
打开文件的另一种方式
with open():
优点1:不用手动关闭文件句柄,会在一定时间关闭
优点2:可以一个语句操作多个文件句柄,一个with可以操作多个open
with open('文件的读', encoding='utf-8') as f1, \
open('文件的追加', encoding='utf-8', mode='a') as f2:
print(f1.read())
print(f2.write('追加一点。。'))\代表这一行代码没有完从下一行开始
文件操作的改
现存所有的软件对文件修改都是经历这五步(底层)
以读的模式打开原文件
以写的模式创建一个新文件。
将原文件的内容读出来修改成新内容,写入新文件。
将原文件删除。内存级别
将新文件重命名成原文件
low版的,因为用的是 read() 只针对小的文件,大的文件 read() 读的时候就会把内存占满(一次全读)
import os
with open('文件的改', encoding='utf-8') as f1, \ # 读取要读取的文件
open('文件的改.txt', encoding='utf-8', mode='w') as f2: # 新建一个新文件
low = f1.read() # 读取
content_low = low.replace('Python', 'PHP') # 修改读取的文件内容
content_new = f2.write(content_low) # 修改后写入新文件
os.remove('文件的改') # 删除原文件
os.rename('文件的改.txt', '文件的改') # 把新文件改成原文件的名字进阶版。for 每次循环读取每一行的值,只占用当前一行的内存,占用资源少。
import os
with open('文件的改', encoding='utf-8') as f1, \ # 读取要改的文件
open('文件的改.txt', encoding='utf-8', mode='w') as f2: # 新建一个文件
for low in f1: # for 循环读取要改文件的每一行
content_new = low.replace('Python', 'PHP') # 每循环一行修改一行
f2.write(content_new) # 修改后的每一写入新文件
os.remove('文件的改') # 删除原文件
os.rename('文件的改.txt', '文件的改') # 把新文件改成原文件的名字
day-08-文件管理的更多相关文章
- linux 基础命令与文件管理
Linux终端介绍 Shell提示符 Bash Shell基本语法 基本命令的使用:ls.pwd.cd 查看系统和BIOS硬件时间 Linux如何获得帮助 Linux关机命令:shutdow.in ...
- oracle密码文件管理
密码文件 密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [or ...
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...
- Linux文件管理和编辑常用命令
Linux文件管理和编辑常用命令 mkdir 命令 功能说明 mkdir 命令用于创建一个目录,mkdir是make directory的缩写 格式: mkdir [选项] 目录名 mkdir 命令的 ...
- Oracle体系结构之oracle密码文件管理
密码文件 密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [or ...
- 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...
- 编程体系结构(08):Spring.Mvc.Boot框架
本文源码:GitHub·点这里 || GitEE·点这里 一.Spring框架 1.框架概述 Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(四)-介绍库函数,获取一些SD卡的信息
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- Linux安装LAMP开发环境及配置文件管理
Linux主要分为两大系发行版,分别是RedHat和Debian,lamp环境的安装和配置也会有所不同,所以分别以CentOS 7.1和Ubuntu 14.04做为主机(L) Linux下安装软件,最 ...
- java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技术:313596790freemaker模版技术 ,0个代码不用写 ...
随机推荐
- Travis CI in Action
Travis CI in Action node.js https://docs.travis-ci.com/user/tutorial/ https://docs.travis-ci.com/use ...
- SSO & Single Sign On
SSO & Single Sign On 单点登录 https://en.wikipedia.org/wiki/Single_sign-on https://cloud.google.com/ ...
- tslint 忽略对某行代码的检测
tslint rules class Ajanuw { constructor() { console.log("hello ajanuw"); } } // @ts-ignore ...
- Scrapy 项目:腾讯招聘
目的: 通过爬取腾讯招聘网站(https://careers.tencent.com/search.html)练习Scrapy框架的使用 步骤: 1.通过抓包确认要抓取的内容是否在当前url地址中,测 ...
- JAVA 8 新特性实用总JAVA 8 新特性实用总结结
JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 ...
- Java开发工程师最新面试题库系列——Spring部分(附答案)
Spring Spring框架是什么? 答:Spring是轻量级的面向切面和控制反转的框架.初代版本为2002年发布的interface21,Spring框架是为了解决企业级应用开发的复杂性的出现的, ...
- html5的标签中,哪些是行内元素,哪些是块级元素。
块级元素:块级大多为结构性标记 <address>...</adderss> <center>...</center> 地址文字 <h1> ...
- 边缘计算k8s集群之SuperEdge
什么是边缘计算? 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应 ...
- vue之provide和inject跨组件传递属性值失败(父组件向子组件传值的两种方式)
简单介绍:当一个子组件需要用到父组件的父组件的某些参数.那么这个时候为了避免组件重复传参,使用vue的依赖注入是个不错的方法,直接在最外层组件设置一个provide,内部不管多少嵌套都可以直接取到最外 ...
- 缓存cache和缓冲区buffer
一.cache 1.cache的定义.从宏观上讲,缓存是处理速度不匹配的问题.可以是静态缓存(内存缓存.磁盘缓存).动态缓存(前端的缓存)和数据库缓存.另一个角度,从CPU来看,可以是寄存器和内存之间 ...