1. 文件操作介绍

大家应该听说过一句话:“好记性不如烂笔头”。

不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,数据就会丢失

在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示

 

2. 文件的读写

文件的读写其实主要分几个部分,文本文件、二进制文件(图片音频视频)、JSON文件,操作上大同小异

示例:

  1. import time
  2. def main():
  3. f = open('F://a.txt', 'r', encoding='utf-8')
  4. print(f.read())
  5. f.close()
  6. # 一次性读取整个文件的内容
  7. with open("F://a.txt","r",encoding='utf-8') as f:
  8. print(f.read())
  9. # 通过for-in循环逐行读取
  10. with open("F://a.txt",mode="r") as f:
  11. for line in f:
  12. print(line,end="")
  13. # 读取文件按行读取到列表中
  14. with open("F://a.txt","r",encoding='utf-8') as f:
  15. lines = f.readlines()
  16. print(lines)
  17. if __name__ == "__main__":
  18. main()

注:通过with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,无须在 finally 关闭文件流

 

2.1 文本文件

要将文本信息写入文件文件也非常简单,在使用open函数时指定好文件名并将文件模式设置为'w'即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为'a'。下面的例子演示了如何将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。

  1. from math import sqrt
  2. #是否是素数
  3. def is_prime(n):
  4. """判断素数的函数"""
  5. assert n > 0
  6. for x in range(2,int(sqrt(n)) + 1):
  7. if n % x == 0:
  8. return False
  9. return False if n == 1 else True
  10. def main():
  11. filenames = ('F://a.txt',"F://b.txt","F://c.txt")
  12. fs_list = []
  13. try:
  14. for f in filenames:
  15. fs_list.append(open(f,"w",encoding='utf-8'))
  16. for number in range(1,10001):
  17. if is_prime(number):
  18. if number < 100:
  19. print("1:",number)
  20. fs_list[0].write(str(number) + '\n')
  21. elif number < 1000:
  22. print("2:",number)
  23. fs_list[1].write(str(number) + '\n')
  24. else:
  25. print("3:",number)
  26. fs_list[2].write(str(number) + '\n')
  27. except Exception as e:
  28. print(e)
  29. finally:
  30. for fs in fs_list:
  31. fs.close()
  32. print("操作完成")
  33. if __name__ == '__main__':
  34. main()

 

2.2 二进制文件

了解完文本文件的操作,二进制文件的读写复制也几乎差不多

  1. """
  2. 读写二进制文件
  3. version:0.1
  4. author:coke
  5. """
  6. def main():
  7. try:
  8. with open("F://aa.jpg","rb") as f1:
  9. data = f1.read()
  10. print(type(data))
  11. with open("F://bb.jpg","wb") as f2:
  12. f2.write(data)
  13. except Exception as e:
  14. print(e)
  15. if __name__ == "__main__":
  16. main()

 

2.3 JSON文件

我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。

  1. """
  2. 读取json文件
  3. version:0.1
  4. author:coke
  5. """
  6. import json
  7. def main():
  8. mydict = {
  9. 'name': 'coke',
  10. 'age':'19',
  11. 'qq':623105972,
  12. 'friends':['David','Jack'],
  13. 'cars':[
  14. {"brand":"BYD","max_speed":"180"},
  15. {"brand":"BM","max_speed":"190"}
  16. ]
  17. }
  18. try:
  19. with open("F://data.json","w",encoding='utf-8') as fs:
  20. json.dump(mydict,fs)
  21. except IOError as e:
  22. print(e)
  23. print("保存数据完成")
  24. if __name__ == '__main__':
  25. main()

json模块主要有四个比较重要的函数,分别是:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象
  1. import requests
  2. import json
  3. def main():
  4. resp = requests.get("http://api.tianapi.com/guonei/?key=APIKey&num=10")
  5. data_model = json.loads(resp.text)
  6. print(data_model)
  7. print(data_model['code'])
  8. print(data_model['msg'])
  9. if __name__ == '__main__':
  10. main()

 

3. 文件的定位,重命名和删除

在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取

如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()

seek(offset, from)有2个参数

  • offset:偏移量
  • from:方向
    • 0:表示文件开头
    • 1:表示当前位置
    • 2:表示文件末尾

os模块中的rename()可以完成对文件的重命名操作,remove()可以完成对文件的删除操作

  1. # -*- coding:utf-8 -*-
  2. """
  3. 文件的定位读写
  4. version:0.1
  5. author:coke
  6. """
  7. import os
  8. f = open("F://a.txt","r")
  9. str = f.read(2)
  10. print(str)
  11. #查找当前位置
  12. position = f.tell()
  13. print("当前位置:",position)
  14. str = f.read(3)
  15. print(str)
  16. #查找当前位置
  17. position = f.tell()
  18. print("当前位置:",position)
  19. f.seek(1,0)
  20. position = f.tell()
  21. print("seek完当前位置:",position)
  22. f.close()
  23. #关闭文件流才可以 进行重命名和删除
  24. os.rename("F://a.txt","F://rename.txt")
  25. os.remove("F://b.txt")

 

4. 文件夹的相关操作

实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等

就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块

  1. import os
  2. from time import sleep
  3. #创建文件夹
  4. if not os.path.exists("F://tempDir"):
  5. os.mkdir("F://tempDir")
  6. #获取当前目录
  7. currentDir = os.getcwd()
  8. print(currentDir)
  9. print("--------------")
  10. #改变默认目录
  11. os.chdir("F://")
  12. #获取默认目录
  13. defaultDir = os.listdir("./")
  14. print(defaultDir)
  15. #过5秒删除文件
  16. sleep(5)
  17. os.rmdir("F://tempDir")

Python集训营45天—Day08 (文件操作)的更多相关文章

  1. Python集训营45天—Day04 (函数)

    目录 1. 函数介绍 2. 函数的参数 3. 模块与函数 4. 递归函数 5. 匿名函数 6. 多返回值 python 的学习已经进入到第四天,前面几章我们已经学会了基本的变量操作,以及分支结构和循环 ...

  2. Python集训营45天—Day01

    目录 1. Python简介 2. 第一个Python程序 3. 知识点梳理 序言:未来是数据的世界,而python 是一门可以高效简洁处理数据的语言,博主打算花45天左右完成python学习的从0到 ...

  3. Python集训营45天—Day03

    目录 1. 分支结构 1.1 初步介绍 1.2 使用案例 1.3 练习 2.循环结构 1.1 初步介绍 1.2 使用案例 1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行 ...

  4. Python集训营45天—Day02

    目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...

  5. Python集训营45天—Day07 (面向对象编程进阶)

    目录 1. @property装饰器 2. 魔法方法 3. 类属性和实例属性 4.静态方法和类方法 5. 单继承和多继承 6. 多态 7. del 方法 序言:上个章节我们了解了面向对象的基础知识,这 ...

  6. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  7. day08——文件操作

    day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...

  8. Python基础(六) 基础文件操作

    今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个 ...

  9. python基础(内置函数+文件操作+lambda)

    一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...

随机推荐

  1. Luogu-P2512 [HAOI2008]糖果传递 贪心

    传送门:https://www.luogu.org/problemnew/show/P2512 题意: 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1 ...

  2. Gym 100956 A Random Points on the Circle

    二分答案. 对于每次二分后的答案来说, 先倍增序列,通过 two point 来找到 以每个点为起点的最优的符合答案的在哪里. 然后可以DFS树去判断他的前k祖先之间的距离是不是大于k. 常数有点大. ...

  3. CF - 1131 D Gourmet choice

    题目传送门 先把 = 的人用并查集合并在一起. 然后 < > 的建边, 跑一遍 toposort 之后就好了. 入度为0点的值肯定为1, 然后就是因为这个是按照时间线走过来的,所以一个点的 ...

  4. cesium页面小控件的隐藏

    cesium页面小控件的隐藏 1   创建一个Viewer var viewer = new Cesium.Viewer('cesiumContainer');//cesiumContainer为di ...

  5. 【Nginx】实现负载均衡的几种方式

    要理解负载均衡,必须先搞清楚正向代理和反向代理. 注: 正向代理,代理的是用户. 反向代理,代理的是服务器 什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能 ...

  6. PHP 通过curl POST传递 伪造cookie 传递信息

    一些论坛网站需要每日签到太麻烦,于是写了一个Win 的定时任务,通过curl 去处理传递的伪造Cookie 和 header; 有不妥的地方,希望各位大佬们多多指正,谢谢各位大佬: $fp = @fo ...

  7. 深入Go的错误处理机制使用

    开篇词 程序运行过程中不可避免的发生各种错误,要想让自己的程序保持较高的健壮性,那么异常,错误处理是需要考虑周全的,每个编程语言提供了一套自己的异常错误处理机制,在Go中,你知道了吗?接下来我们一起看 ...

  8. mysql之innodb存储引擎介绍

    一.Innodb体系架构 1.1.后台线程 后台任务主要负责刷新内存中的数据,保证缓冲池的数据是最近的数据,此外还将修改的数据刷新到文件磁盘,保证在数据库发生异常的情况下Innodb能恢复到正常的运行 ...

  9. java中public,private,protected和default的区别

    类中的数据成员和成员函数据具有的访问权限包括:public.private.protect.default(包访问权限) 作用域       当前类     同一package 子孙类   其他pac ...

  10. Winform中设置ZedGraph曲线图的水平与竖直参考线

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...