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)

  1. f = open("护⼠士少妇嫩模.txt",mode="r", encoding="utf-8")
  2. content = f.read()
  3. print(content)
  4. f.close()

需要注意encoding表⽰示编码集. 根据⽂文件的实际保存编码进⾏行行获取数据, 对于我们⽽而⾔言. 更更
多的是utf-8.
rb. 读取出来的数据是bytes类型, 在rb模式下. 不能选择encoding字符集.

  1. f = open("护⼠士少妇嫩模.txt",mode="rb" )
  2. content = f.read()
  3. print(content)
  4. f.close()
  5. 结果:
  6. b'\xe6\xaf\x85\xe5\x93\xa5, \xe5\xa4\xaa\xe7\x99\xbd,
  7. 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,将原文件全部读出来并打印。

  1. f=open("./a1.txt",mode="r",encoding="utf-8")
  2. content=f.read()
  3. print(content)
  4. f.close()

b,在原文件后面追加一行内容:信不信由你,反正我信了。

  1. f=open("./a1.txt",mode="a",encoding="utf-8")
  2. f.write("\n信不信由你,反正我信了。")
  3. f.close()

c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。

  1. f=open("./a1.txt",mode="r+",encoding="utf-8")
  2. conetent=f.read()
  3. f.write("\n信不信由你,反正我信了。")
  4. conetent=f.read()
  5. print(conetent)

d,将原文件全部清空,换成下面的内容:

每天坚持一点,

每天努力一点,

每天多思考一点,

慢慢你会发现,

你的进步越来越大。

  1. f=open("./a1.txt",mode="w",encoding="utf-8")
  2. f.write("""每天坚持一点,
  3. 每天努力一点,
  4. 每天多思考一点,
  5. 慢慢你会发现,
  6. 你的进步越来越大。""")
  7. f.flush()
  8. f.close()
  1. #e,将原文件内容全部读取出来,# 并在‘我说的都是真的。哈哈’这一行的前面# 加一行,‘你们就信吧~’然后将更改之后的新内容,# 写入到一个新文件:a1.txt。
  1. import os
  2. f=open("./a1.txt",mode="r+",encoding="utf-8")
  3. lis=f.readlines()
  4. lis.insert(3,"你们就信吧")
  5. for i in lis:
  6. print(i.strip())
  7. f1=open("./a1_temp.txt",mode="w",encoding="utf-8")
  8. for i in lis:
  9. f1.write(i)
  10. f1.flush()
  11. os.remove("a1.txt")
  12. os.rename("a1_temp.txt","a1.txt")
  13.  
  14. f.close()
  15. f1.close()

1,有如下文件,t1.txt,里面的内容为:

葫芦娃,葫芦娃,

一根藤上七个瓜

风吹雨打,都不怕,

啦啦啦啦。

我可以算命,而且算的特别准:

上面的内容你肯定是心里默唱出来的,对不对?哈哈

分别完成下面的功能:

a,以r+的模式打开原文件,判断原文件是否可读,是否可写。

  1. f=open("t1.txt",mode="r+",encoding="utf-8")
  2. if f.read(1)=="葫":
  3. print("t1文件可读")
  4. if f.write("x"):
  5. print("t1文件可写")

,以r的模式打开原文件,利用for循环遍历文件句柄。

  1. f=open("t1.txt",mode="r",encoding="utf-8")
  2. for i in f:
  3. print(i.strip())
  1. #以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
  1. f=open("t1.txt",mode="r",encoding="utf-8")
  2. print(f.readlines())
  1. # readlines(),并分析b,与c 有什么区别?
  1. readlines()取到的是以行为单位,组成的列表,b采用的是循环输出每一行
  1. # 深入理解文件句柄与readlines()结果的区别。文件句柄是

d,以r模式读取‘葫芦娃,’前四个字符。

  1. f=open("t1.txt",mode="r",encoding="utf-8")
  2. print(f.read(4))

e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。

  1. f =open("t1.txt",mode="r",encoding="utf-8")
  2. print(f.readline().strip())

f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。

  1. f=open("t1.txt",mode="r",encoding="utf-8")
  2. f.readline()
  3. f.readline()
  4. for i in f:
  5. print(i.strip())

g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将 原内容全部读取出来。

  1. f=open("t1.txt",mode="a+",encoding="utf-8")
  2. f.write("XXXXXX")
  3. f.seek(0)
  4. print(f.read())

h,截断原文件,留下内容:‘葫芦娃’

  1. f=open("t1.txt",mode="r+",encoding="utf-8")
  2. f.truncate(9)
  3. f.flush()
  4. 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}......] 并计算出总价钱。

  1. import os
  2. f=open("a.txt",mode="r",encoding="utf-8")
  3. f1=open("a_temp.txt",mode="a",encoding="utf-8")
  4. lis=f.readlines()
  5. lis1=[]
  6. lis2=[]
  7. for i in range(len(lis)):
  8. lis1.append(lis[i].strip().split(" "))
  9. ii=0
  10. sum=0
  11. while ii < len(lis1):
  12. dic = {}
  13. dic["name"]=lis1[ii][0]
  14. dic["price"]=int(lis1[ii][1])
  15. dic["amount"]=int(lis1[ii][2])
  16. dic["小计"]=int(lis1[ii][1])*int(lis1[ii][2])
  17. lis2.append(dic)
  18. ii+=1
  19. for num in range(len(lis2)):
  20. sum+=lis2[num]["小计"]
  21. lis2.append({"总计":sum})
  22. print(lis2)
  23. f1.write(str(lis2))
  24. os.remove("a.txt")
  25. os.rename("a_temp.txt","a.txt")

有如下文件:

alex是老男孩python发起人,创建人。

alex其实是人妖。

谁说alex是sb?

你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。

将文件中所有的alex都替换成大写的SB(文件的改的操

  1. import os
  2. f=open("alex.txt",mode="r",encoding="utf-8")
  3. lis=f.readlines()
  4. lis1=[]
  5. for el in range(len(lis)):
  6. if "alex" in lis[el]:
  7. lis1.append(lis[el].replace("alex","SB"))
  8. else:
  9. lis1.append(lis[el])
  10. f.close()
  11. f1=open("alex_temp.txt",mode="a",encoding="utf-8")
  12. for i in range(len(lis1)):
  13. f1.write(lis1[i])
  14. f1.flush()
  15. f1.close()
  16. os.remove("alex.txt")
  17. 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}......]
并计算出总价钱。

  1. f=open("a11.txt",mode="r",encoding="utf-8")
  2. lis=[]
  3. for line in f:
  4. lis.append(line.strip())
  5. lis1=[]
  6. # print(lis)
  7. for i in range(len(lis)):
  8. lis1.append(lis[i].split(" "))
  9. #[['name:apple', 'price:10', 'amount:3', 'year:2012'], ['name:tesla', 'price:100000', 'amount:1', 'year:2013']]
  10. lis2=[]
  11.  
  12. for i2 in range(len(lis1)):
  13. dic={}
  14. # print(lis1[i2][0].split(":"),lis1[i2][1].split(":"),lis1[i2][3].split(":"))
  15. dic[lis1[i2][0].split(":")[0]]=[lis1[i2][0].split(":")[1]]
  16. dic[lis1[i2][1].split(":")[0]]=int(lis1[i2][1].split(":")[1])
  17. dic[lis1[i2][2].split(":")[0]] = int(lis1[i2][2].split(":")[1])
  18. dic[lis1[i2][3].split(":")[0]]=int(lis1[i2][3].split(":")[1])
  19. lis2.append(dic)
  20. sum=0
  21. for l in range(len(lis2)):
  22. sum+=lis2[l]["price"]*lis2[l]["amount"]
  23. lis2.append({"total":sum})
  24. print(lis2)
  25. print(sum)
  1. import os
  2. f=open("a11.txt",mode="r",encoding="utf-8")
  3. f1=open("a11_temp.txt",mode="a",encoding="utf-8")
  4. lis=[]
  5. for line in f:
  6. lis.append(line.strip())
  7. f.close()
  8. lis1=[]
  9. # print(lis)
  10. for i in range(len(lis)):
  11. lis1.append(lis[i].split(" "))
  12. #[['name:apple', 'price:10', 'amount:3', 'year:2012'], ['name:tesla', 'price:100000', 'amount:1', 'year:2013']]
  13. lis2=[]
  14.  
  15. for i2 in range(len(lis1)):
  16. dic={}
  17. # print(lis1[i2][0].split(":"),lis1[i2][1].split(":"),lis1[i2][3].split(":"))
  18. dic[lis1[i2][0].split(":")[0]]=[lis1[i2][0].split(":")[1]]
  19. dic[lis1[i2][1].split(":")[0]]=int(lis1[i2][1].split(":")[1])
  20. dic[lis1[i2][2].split(":")[0]] = int(lis1[i2][2].split(":")[1])
  21. dic[lis1[i2][3].split(":")[0]]=int(lis1[i2][3].split(":")[1])
  22. lis2.append(dic)
  23. sum=0
  24. for l in range(len(lis2)):
  25. sum+=lis2[l]["price"]*lis2[l]["amount"]
  26. lis2.append({"total":sum})
  27. print(lis2)
  28. print(sum)
  29. for w in lis2:
  30. f1.write(lis2[w])
  31. f1.flush()
  32. f1.close()
  33. os.remove("a11.txt")
  34. 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,'备注':'单身狗'},
......]

  1. import os
  2. f=open("部门.txt",mode="r",encoding="utf-8")
  3. f1=open("部门_temp.txt",mode="a",encoding="utf-8")
  4. lis=[]
  5. lis_end=[]
  6. for line in f:
  7. lis1_1=[]
  8. lis1_1.append(line.strip())
  9. lis.append(lis1_1)
  10. f.close()
  11. """
  12. lis=[['序号 部门 人数 平均年龄 备注'],
  13. ['1 python 30 26 单身狗'],
  14. ['2 Linux 26 30 没对象'],
  15. ['3 运营部 20 24 女生多']]
  16. """
  17. for i in range(len(lis)):
  18. # print(lis[i][0].split())
  19. """
  20. ['序号', '部门', '人数', '平均年龄', '备注']
  21. ['1', 'python', '30', '26', '单身狗']
  22. ['2', 'Linux', '26', '30', '没对象']
  23. ['3', '运营部', '20', '24', '女生多']
  24. """
  25. if i==0:
  26. # print(lis[i][0].split()[0])
  27. pass
  28. else:
  29. dic2={}
  30.  
  31. dic2[lis[0][0].split()[0]]=lis[i][0].split()[0]
  32. dic2[lis[0][0].split()[1]] = lis[i][0].split()[1]
  33. dic2[lis[0][0].split()[2]] = lis[i][0].split()[2]
  34. dic2[lis[0][0].split()[3]] = lis[i][0].split()[3]
  35. dic2[lis[0][0].split()[4]] = lis[i][0].split()[4]
  36. lis_end.append(dic2)
  37. print(lis_end)
  38. f1.write(str(lis_end))
  39. f1.flush()
  40. f1.close()
  41. os.remove("部门.txt")
  42. os.rename("部门_temp.txt","部门.txt")

  

  1.  

day 008 文件操作的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  3. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  4. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  5. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  6. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  9. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

随机推荐

  1. SPOJ11469 SUBSET

    题面 Farmer John's owns N cows (2 <= N <= 20), where cow i produces M(i) units of milk each day ...

  2. 16、Java并发编程:Timer和TimerTask

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  3. Drupal7重置密码方法

    Drupal版本 7.40 方法1: 根目录index.php添加 require_once 'includes/password.inc'; require_once 'includes/boots ...

  4. 洛谷P2831 愤怒的小鸟

    洛谷P2831 愤怒的小鸟 原题链接 题解 首先简单数学公式送上. \(ax_1^2+bx_1=y_1\) \(ax_2^2+bx_2=y_2\) \(ax_1^2x_2+bx_1x_2=y_1x_2 ...

  5. C#是数据类型

    C#又开始了 开始数据类型 用的软件是VS2017 E short 短整型 int  中等整型 long  长整形 string  字符串类型 bool  布尔类型(true/flase)  相当于数 ...

  6. Oracle数据库备份与还原命令

    http://www.2cto.com/database/201305/210262.html

  7. JavaScript正则表达式练习

    校验邮政编码(由六位组成). var reg = /^\d{6}$/; var str = "130400"; var b = str.match(reg); if (b === ...

  8. hdu2187悼念512汶川大地震遇难同胞——老人是真饿了(贪心 简单题)

    传送门 简单题 #include<bits/stdc++.h> using namespace std; struct node { double dan,weight; }a[]; bo ...

  9. Vue 编程之路(一)——父子组件之间的数据传递

    最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型.其中部分页面是数据管理页,所以有很多可以复用的表格,故引入自定义组件.在这里分享一下开 ...

  10. idea 模版之自定义类与方法注释

    idea 模版之自定义类与方法注释 很多公司都有要求的代码注释规范,我们每新建类或者方法的时候从新复制粘贴很麻烦,而且容易粘错. 当然自定义模板还可以用到很多地方,比如系统自带的 sout就是syst ...