Python集训营45天—Day08 (文件操作)
1. 文件操作介绍
大家应该听说过一句话:“好记性不如烂笔头”。
不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,数据就会丢失
在Python中实现文件的读写操作其实非常简单,通过Python内置的open
函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示
2. 文件的读写
文件的读写其实主要分几个部分,文本文件、二进制文件(图片音频视频)、JSON文件,操作上大同小异
示例:
import time
def main():
f = open('F://a.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
# 一次性读取整个文件的内容
with open("F://a.txt","r",encoding='utf-8') as f:
print(f.read())
# 通过for-in循环逐行读取
with open("F://a.txt",mode="r") as f:
for line in f:
print(line,end="")
# 读取文件按行读取到列表中
with open("F://a.txt","r",encoding='utf-8') as f:
lines = f.readlines()
print(lines)
if __name__ == "__main__":
main()
注:通过with
关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,无须在 finally 关闭文件流
2.1 文本文件
要将文本信息写入文件文件也非常简单,在使用open
函数时指定好文件名并将文件模式设置为'w'
即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为'a'
。下面的例子演示了如何将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。
from math import sqrt
#是否是素数
def is_prime(n):
"""判断素数的函数"""
assert n > 0
for x in range(2,int(sqrt(n)) + 1):
if n % x == 0:
return False
return False if n == 1 else True
def main():
filenames = ('F://a.txt',"F://b.txt","F://c.txt")
fs_list = []
try:
for f in filenames:
fs_list.append(open(f,"w",encoding='utf-8'))
for number in range(1,10001):
if is_prime(number):
if number < 100:
print("1:",number)
fs_list[0].write(str(number) + '\n')
elif number < 1000:
print("2:",number)
fs_list[1].write(str(number) + '\n')
else:
print("3:",number)
fs_list[2].write(str(number) + '\n')
except Exception as e:
print(e)
finally:
for fs in fs_list:
fs.close()
print("操作完成")
if __name__ == '__main__':
main()
2.2 二进制文件
了解完文本文件的操作,二进制文件的读写复制也几乎差不多
"""
读写二进制文件
version:0.1
author:coke
"""
def main():
try:
with open("F://aa.jpg","rb") as f1:
data = f1.read()
print(type(data))
with open("F://bb.jpg","wb") as f2:
f2.write(data)
except Exception as e:
print(e)
if __name__ == "__main__":
main()
2.3 JSON文件
我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。
"""
读取json文件
version:0.1
author:coke
"""
import json
def main():
mydict = {
'name': 'coke',
'age':'19',
'qq':623105972,
'friends':['David','Jack'],
'cars':[
{"brand":"BYD","max_speed":"180"},
{"brand":"BM","max_speed":"190"}
]
}
try:
with open("F://data.json","w",encoding='utf-8') as fs:
json.dump(mydict,fs)
except IOError as e:
print(e)
print("保存数据完成")
if __name__ == '__main__':
main()
json模块主要有四个比较重要的函数,分别是:
dump
- 将Python对象按照JSON格式序列化到文件中dumps
- 将Python对象处理成JSON格式的字符串load
- 将文件中的JSON数据反序列化成对象loads
- 将字符串的内容反序列化成Python对象
import requests
import json
def main():
resp = requests.get("http://api.tianapi.com/guonei/?key=APIKey&num=10")
data_model = json.loads(resp.text)
print(data_model)
print(data_model['code'])
print(data_model['msg'])
if __name__ == '__main__':
main()
3. 文件的定位,重命名和删除
在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset, from)有2个参数
- offset:偏移量
- from:方向
- 0:表示文件开头
- 1:表示当前位置
- 2:表示文件末尾
os模块中的rename()可以完成对文件的重命名操作,remove()可以完成对文件的删除操作
# -*- coding:utf-8 -*-
"""
文件的定位读写
version:0.1
author:coke
"""
import os
f = open("F://a.txt","r")
str = f.read(2)
print(str)
#查找当前位置
position = f.tell()
print("当前位置:",position)
str = f.read(3)
print(str)
#查找当前位置
position = f.tell()
print("当前位置:",position)
f.seek(1,0)
position = f.tell()
print("seek完当前位置:",position)
f.close()
#关闭文件流才可以 进行重命名和删除
os.rename("F://a.txt","F://rename.txt")
os.remove("F://b.txt")
4. 文件夹的相关操作
实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等
就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块
import os
from time import sleep
#创建文件夹
if not os.path.exists("F://tempDir"):
os.mkdir("F://tempDir")
#获取当前目录
currentDir = os.getcwd()
print(currentDir)
print("--------------")
#改变默认目录
os.chdir("F://")
#获取默认目录
defaultDir = os.listdir("./")
print(defaultDir)
#过5秒删除文件
sleep(5)
os.rmdir("F://tempDir")
Python集训营45天—Day08 (文件操作)的更多相关文章
- Python集训营45天—Day04 (函数)
目录 1. 函数介绍 2. 函数的参数 3. 模块与函数 4. 递归函数 5. 匿名函数 6. 多返回值 python 的学习已经进入到第四天,前面几章我们已经学会了基本的变量操作,以及分支结构和循环 ...
- Python集训营45天—Day01
目录 1. Python简介 2. 第一个Python程序 3. 知识点梳理 序言:未来是数据的世界,而python 是一门可以高效简洁处理数据的语言,博主打算花45天左右完成python学习的从0到 ...
- Python集训营45天—Day03
目录 1. 分支结构 1.1 初步介绍 1.2 使用案例 1.3 练习 2.循环结构 1.1 初步介绍 1.2 使用案例 1. 分支结构 1.1 初步介绍 至今,我们所写的Python代码都是顺序执行 ...
- Python集训营45天—Day02
目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...
- Python集训营45天—Day07 (面向对象编程进阶)
目录 1. @property装饰器 2. 魔法方法 3. 类属性和实例属性 4.静态方法和类方法 5. 单继承和多继承 6. 多态 7. del 方法 序言:上个章节我们了解了面向对象的基础知识,这 ...
- Python学习系列(五)(文件操作及其字典)
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...
- day08——文件操作
day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...
- Python基础(六) 基础文件操作
今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个 ...
- python基础(内置函数+文件操作+lambda)
一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...
随机推荐
- 【管理学】SMART
- codeforces 877 E. Danil and a Part-time Job(线段树(dfs序))
题目链接:http://codeforces.com/contest/877/problem/E 题解:显然一看就感觉要么树链剖分要么线段树+dfs序,题目要求的操作显然用线段树+dfs序就可以实现. ...
- poj1037 [CEOI 2002]A decorative fence 题解
---恢复内容开始--- 题意: t组数据,每组数据给出n个木棒,长度由1到n,除了两端的木棒外,每一根木棒,要么比它左右的两根都长,要么比它左右的两根都短.即要求构成的排列为波浪型.对符合要求的排列 ...
- gitlab版本管理小白入门
在新公司入职已经一周了,由于刚好在版本空档期,没有什么开发任务,就自己熟悉熟悉代码什么的. 目前公司用的是git,原来公司用的是svn,今天就记录下从小白入门. gitlab分布式版本管理,理论介绍就 ...
- Android-打包AAR步骤以及最为关键的注意事项!
### 简介 最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路. **首先何为aar包?** ![ ...
- CentOS 7 下的网络配置工具
之前在CentOS 6下编辑网卡,直接使用setup工具就可以了. 但在新版的CentOS 7里,setuptool已经没有网络编辑组件了,取而代之的是NetworkManager Text User ...
- mapper文件中“添加一条新数据并返回此数据的ID(主键)”的方法
在mapper文件的insert语句前加上<selectKey>标签即可 如下: 添加前测试: 添加后测试:
- asp.netcore2.1 IIS部署发布
下载SDK .net core2.1 SDK下载地址:https://www.microsoft.com/net/download 创建Demo项目 打开 powershell 新建项目 dotnet ...
- .Net基础篇_学习笔记_第八天_复杂数据类型(常量/枚举/结构)
1.常量: 声明的常量的语法:const 变量类型 变量名=值;最大的特点就是,声明了常量后,就不能再被重新赋值. 2.枚举 语法:[public] enum 枚举名{ 值1, 值2, 值3, ... ...
- Python编程书籍高清PDF免费下载
场景 CSDN: https://blog.csdn.net/badao_liumang_qizhi 博客园: https://www.cnblogs.com/badaoliumangqizhi/ 哔 ...