day 008 文件操作
08. 万恶之源-⽂文件操作
本节主要内容:
1. 初识⽂文件操作
2. 只读(r, rb)
3. 只写(w, wb)
4. 追加(a, ab)
5. r+读写
6. w+写读
7. a+写读(追加写读)
8. 其他操作⽅方法
9. ⽂文件的修改以及另⼀一种打开⽂文件句句柄的⽅方式
主要内容:
⼀一. 初识⽂文件操作
使⽤用python来读写⽂文件是非常简单的操作. 我们使⽤用open()函数来打开⼀一个⽂文件, 获取到⽂文
件句句柄. 然后通过⽂文件句句柄就可以进⾏行行各种各样的操作了了. 根据打开⽅方式的不同能够执⾏行行的操
作也会有相应的差异.
打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
⼆二. 只读操作(r, rb)
f = open("护⼠士少妇嫩模.txt",mode="r", encoding="utf-8") content = f.read() print(content) f.close()
需要注意encoding表⽰示编码集. 根据⽂文件的实际保存编码进⾏行行获取数据, 对于我们⽽而⾔言. 更更
多的是utf-8.
rb. 读取出来的数据是bytes类型, 在rb模式下. 不能选择encoding字符集.
f = open("护⼠士少妇嫩模.txt",mode="rb" ) content = f.read() print(content) f.close() 结果: b'\xe6\xaf\x85\xe5\x93\xa5, \xe5\xa4\xaa\xe7\x99\xbd, wuse\n\xe5\x91\xb5\xe5\x91\xb5\n\xe6\x97\xa5\xe5\xa4\xa9'
rb的作⽤用: 在读取非⽂文本⽂文件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要⽤用到
rb. 因为这种数据是没办法直接显⽰示出来的. 在后⾯面我们⽂文件上传下载的时候还会⽤用到. 还有.
我们看的直播. 实际上都是这种数据.
绝对路路径和相对路路径:
1. 绝对路路径:从磁盘根⽬目录开始⼀一直到⽂文件名.
2. 相对路路径:同⼀一个⽂文件夹下的⽂文件. 相对于当前这个程序所在的⽂文件夹⽽而⾔言. 如果在同
⼀一个⽂文件夹中. 则相对路路径就是这个⽂文件名. 如果在上⼀一层⽂文件夹. 则要../
1,有如下文件,a1.txt,里面的内容为:
XXXXXXXXXXX
QWEREGR
只为未来,不为牟利。
我说的都是真的。哈哈
分别完成以下的功能:
a,将原文件全部读出来并打印。
f=open("./a1.txt",mode="r",encoding="utf-8") content=f.read() print(content) f.close()
b,在原文件后面追加一行内容:信不信由你,反正我信了。
f=open("./a1.txt",mode="a",encoding="utf-8") f.write("\n信不信由你,反正我信了。") f.close()
c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
f=open("./a1.txt",mode="r+",encoding="utf-8") conetent=f.read() f.write("\n信不信由你,反正我信了。") conetent=f.read() print(conetent)
d,将原文件全部清空,换成下面的内容:
每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。
f=open("./a1.txt",mode="w",encoding="utf-8") f.write("""每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大。""") f.flush() f.close()
#e,将原文件内容全部读取出来,# 并在‘我说的都是真的。哈哈’这一行的前面# 加一行,‘你们就信吧~’然后将更改之后的新内容,# 写入到一个新文件:a1.txt。
import os f=open("./a1.txt",mode="r+",encoding="utf-8") lis=f.readlines() lis.insert(3,"你们就信吧") for i in lis: print(i.strip()) f1=open("./a1_temp.txt",mode="w",encoding="utf-8") for i in lis: f1.write(i) f1.flush() os.remove("a1.txt") os.rename("a1_temp.txt","a1.txt") f.close() f1.close()
1,有如下文件,t1.txt,里面的内容为:
葫芦娃,葫芦娃,
一根藤上七个瓜
风吹雨打,都不怕,
啦啦啦啦。
我可以算命,而且算的特别准:
上面的内容你肯定是心里默唱出来的,对不对?哈哈
分别完成下面的功能:
a,以r+的模式打开原文件,判断原文件是否可读,是否可写。
f=open("t1.txt",mode="r+",encoding="utf-8") if f.read(1)=="葫": print("t1文件可读") if f.write("x"): print("t1文件可写")
,以r的模式打开原文件,利用for循环遍历文件句柄。
f=open("t1.txt",mode="r",encoding="utf-8") for i in f: print(i.strip())
#以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
f=open("t1.txt",mode="r",encoding="utf-8") print(f.readlines())
# readlines(),并分析b,与c 有什么区别?
readlines()取到的是以行为单位,组成的列表,b采用的是循环输出每一行
# 深入理解文件句柄与readlines()结果的区别。文件句柄是
d,以r模式读取‘葫芦娃,’前四个字符。
f=open("t1.txt",mode="r",encoding="utf-8") print(f.read(4))
e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
f =open("t1.txt",mode="r",encoding="utf-8") print(f.readline().strip())
f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
f=open("t1.txt",mode="r",encoding="utf-8") f.readline() f.readline() for i in f: print(i.strip())
g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将 原内容全部读取出来。
f=open("t1.txt",mode="a+",encoding="utf-8") f.write("XXXXXX") f.seek(0) print(f.read())
h,截断原文件,留下内容:‘葫芦娃’
f=open("t1.txt",mode="r+",encoding="utf-8") f.truncate(9) f.flush() f.close()
1,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
import os f=open("a.txt",mode="r",encoding="utf-8") f1=open("a_temp.txt",mode="a",encoding="utf-8") lis=f.readlines() lis1=[] lis2=[] for i in range(len(lis)): lis1.append(lis[i].strip().split(" ")) ii=0 sum=0 while ii < len(lis1): dic = {} dic["name"]=lis1[ii][0] dic["price"]=int(lis1[ii][1]) dic["amount"]=int(lis1[ii][2]) dic["小计"]=int(lis1[ii][1])*int(lis1[ii][2]) lis2.append(dic) ii+=1 for num in range(len(lis2)): sum+=lis2[num]["小计"] lis2.append({"总计":sum}) print(lis2) f1.write(str(lis2)) os.remove("a.txt") os.rename("a_temp.txt","a.txt")
有如下文件:
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
将文件中所有的alex都替换成大写的SB(文件的改的操
import os f=open("alex.txt",mode="r",encoding="utf-8") lis=f.readlines() lis1=[] for el in range(len(lis)): if "alex" in lis[el]: lis1.append(lis[el].replace("alex","SB")) else: lis1.append(lis[el]) f.close() f1=open("alex_temp.txt",mode="a",encoding="utf-8") for i in range(len(lis1)): f1.write(lis1[i]) f1.flush() f1.close() os.remove("alex.txt") os.rname("alex_temp.txt","alex.txt")
5,文件a1.txt内容(升级题)
name:apple price:10 amount:3 year:2012
name:tesla price:100000 amount:1 year:2013
.......
通过代码,将其构建成这种数据类型:
[{'name':'apple','price':10,'amount':3},
{'name':'tesla','price':1000000,'amount':1}......]
并计算出总价钱。
f=open("a11.txt",mode="r",encoding="utf-8") lis=[] for line in f: lis.append(line.strip()) lis1=[] # print(lis) for i in range(len(lis)): lis1.append(lis[i].split(" ")) #[['name:apple', 'price:10', 'amount:3', 'year:2012'], ['name:tesla', 'price:100000', 'amount:1', 'year:2013']] lis2=[] for i2 in range(len(lis1)): dic={} # print(lis1[i2][0].split(":"),lis1[i2][1].split(":"),lis1[i2][3].split(":")) dic[lis1[i2][0].split(":")[0]]=[lis1[i2][0].split(":")[1]] dic[lis1[i2][1].split(":")[0]]=int(lis1[i2][1].split(":")[1]) dic[lis1[i2][2].split(":")[0]] = int(lis1[i2][2].split(":")[1]) dic[lis1[i2][3].split(":")[0]]=int(lis1[i2][3].split(":")[1]) lis2.append(dic) sum=0 for l in range(len(lis2)): sum+=lis2[l]["price"]*lis2[l]["amount"] lis2.append({"total":sum}) print(lis2) print(sum)
import os f=open("a11.txt",mode="r",encoding="utf-8") f1=open("a11_temp.txt",mode="a",encoding="utf-8") lis=[] for line in f: lis.append(line.strip()) f.close() lis1=[] # print(lis) for i in range(len(lis)): lis1.append(lis[i].split(" ")) #[['name:apple', 'price:10', 'amount:3', 'year:2012'], ['name:tesla', 'price:100000', 'amount:1', 'year:2013']] lis2=[] for i2 in range(len(lis1)): dic={} # print(lis1[i2][0].split(":"),lis1[i2][1].split(":"),lis1[i2][3].split(":")) dic[lis1[i2][0].split(":")[0]]=[lis1[i2][0].split(":")[1]] dic[lis1[i2][1].split(":")[0]]=int(lis1[i2][1].split(":")[1]) dic[lis1[i2][2].split(":")[0]] = int(lis1[i2][2].split(":")[1]) dic[lis1[i2][3].split(":")[0]]=int(lis1[i2][3].split(":")[1]) lis2.append(dic) sum=0 for l in range(len(lis2)): sum+=lis2[l]["price"]*lis2[l]["amount"] lis2.append({"total":sum}) print(lis2) print(sum) for w in lis2: f1.write(lis2[w]) f1.flush() f1.close() os.remove("a11.txt") os.rename("a11_temp.txt","a11.txt")
5,文件a1.txt内容(升级题)
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
......]
import os f=open("部门.txt",mode="r",encoding="utf-8") f1=open("部门_temp.txt",mode="a",encoding="utf-8") lis=[] lis_end=[] for line in f: lis1_1=[] lis1_1.append(line.strip()) lis.append(lis1_1) f.close() """ lis=[['序号 部门 人数 平均年龄 备注'], ['1 python 30 26 单身狗'], ['2 Linux 26 30 没对象'], ['3 运营部 20 24 女生多']] """ for i in range(len(lis)): # print(lis[i][0].split()) """ ['序号', '部门', '人数', '平均年龄', '备注'] ['1', 'python', '30', '26', '单身狗'] ['2', 'Linux', '26', '30', '没对象'] ['3', '运营部', '20', '24', '女生多'] """ if i==0: # print(lis[i][0].split()[0]) pass else: dic2={} dic2[lis[0][0].split()[0]]=lis[i][0].split()[0] dic2[lis[0][0].split()[1]] = lis[i][0].split()[1] dic2[lis[0][0].split()[2]] = lis[i][0].split()[2] dic2[lis[0][0].split()[3]] = lis[i][0].split()[3] dic2[lis[0][0].split()[4]] = lis[i][0].split()[4] lis_end.append(dic2) print(lis_end) f1.write(str(lis_end)) f1.flush() f1.close() os.remove("部门.txt") os.rename("部门_temp.txt","部门.txt")
day 008 文件操作的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
随机推荐
- 2017-2018-1 20155338《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155338<信息安全技术>实验二--Windows口令破解 一.试验环境 系统环境:Windows 实验工具: LC5 SuperDic 二.实验内容及要求 ...
- Caliburn.Micro - IResult and Coroutines
IResult and Coroutines 翻译[三台]:网址[http://home.cnblogs.com/u/3Tai/] Previously, I mentioned that there ...
- js日期控件遇到的问题
一.问题: 在web项目里有很多时候需要使用日期控件来完成相关的功能,但是日期控件的日期格式又和我们的需求不符 那么,就需要我们来自定义日期的格式完成需求 二.解决: 1.取月末: (1)强制取值: ...
- JDK1.7的HashMap的put(key, value)源码剖析
目录 HashMap的put操作源码解析 1.官方文档 2.put(key, value) 3.完结 HashMap的put操作源码解析 1.官方文档 1.1.继承结构 java.lang.Objec ...
- 【SQLSERVER】服务挂起解决办法
一. 问题描述:某项SQLSERVER服务,运行状态为“正在挂起更改”,导致该服务无法使用,也不能启动.停止.重新启动. 二.解决方法 方法一:从任务管理器 → 进程 (勾上 显示所有用户进程) → ...
- 跨域发送HTTP请求详解
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述几种跨域发HTTP请求的几种方法,POST请求,GET请求 目录: 一,采用JsonP的方式(只能 ...
- [WC2010]重建计划 长链剖分
[WC2010]重建计划 LG传送门 又一道长链剖分好题. 这题写点分治的人应该比较多吧,但是我太菜了,只会长链剖分. 如果你还不会长链剖分的基本操作,可以看看我的长链剖分总结. 首先一看求平均值最大 ...
- 【Excel函数】如何在excle区分一列数字是否连续
需求:区分这批卡号,哪些在一个号段 数据源: 89860616090033685544898606160900336855518986061609003368556989860616090033685 ...
- MindMaster安装教程以及激活破解教程
原文地址:https://www.jianshu.com/p/16d2fc7d8e45 第一.激活必须首先断网 第二.运行安装程序,安装完成后先不要打开 第三.把Cracks文件夹下的文件复制到软件安 ...
- HTML5 + CSS3 实现地球绕太阳公转
使用的是正面视角,主要是用 HTML5 + CSS3 来实现,JS只是用来画图. test.html: <!DOCTYPE html> <html> <head> ...