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,循环参数,如果每个元素为真,那么 ...
随机推荐
- ubuntu中rc.local不执行问题
解决思路概括起来如下: 1.首先排除脚本自身问题,可以手动点杠执行下试试, 2.脚本确定没问题后,放到开机启动程序引用的路径下,办法如下 2.1.查看系统的运行级别 2.2.到对应运行的rcX.d的目 ...
- HDU-6229 ICPC-沈阳M- Wandering Robots 概率
HDU - 6229 题意: 在一个n*n的地图中,有一个初始在(0,0)位子的机器人,每次等概率的向相邻的格子移动或者留在原地.问最后留在格子(x,y)(x+y>=n-1)的地方的概率. 思路 ...
- 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)
hihocoder 1828 :https://hihocoder.com/problemset/problem/1828 学习参考:https://www.cnblogs.com/tobyw/p/9 ...
- POJ 2528 Mayor's posters (线段树+区间覆盖+离散化)
题意: 一共有n张海报, 按次序贴在墙上, 后贴的海报可以覆盖先贴的海报, 问一共有多少种海报出现过. 题解: 因为长度最大可以达到1e7, 但是最多只有2e4的区间个数,并且最后只是统计能看见的不同 ...
- CodeForces 1082 E Increasing Frequency
题目传送门 题意:给你n个数和一个c, 现在有一个操作可以使得 [ l, r ]区间里的所有数都加上某一个值, 现在问你c最多可以是多少. 题解: pre[i] 代表的是 [1,i] 中 c 的个数是 ...
- Maximum Product UVA - 11059
Given a sequence of integers S = {S1, S2, . . . , Sn}, you should determine what is the value of the ...
- hdu 4513(Manacher)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513 题解:就是在Manacher判断回文串的过程中添加一条条件 Ma[i + dp[i] - 2] ...
- Go语言标准库之net_http
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现. HTTP协议 超文本传输协 ...
- Mac破解软件下载的几个网站
一.关于破解(盗版)软件的个人看法(可忽略,网址在文末): 1.在经济(预算)允许的范围内,尽量支持正版: 2.软件如衣服,在不同的季节,不同的店铺买价格不一样,国内的一些代理网站经常会打折: 3.作 ...
- asp.net core 使用 NLog日志
NLog是一个配置灵活的日志记录类库,拥有输出日志到文件.存储入库.发送到udp地址的高级功能 1 添加 nlog nuget包 Nlog和NLog.Web.AspNetCore 安装完成后 2 ...