python学习(11)文件的读写操作
1.读文件的7种操作模式
操作模式 | 具体含义 |
---|---|
'r' |
读取 (默认) |
'w' |
写入(会先截断之前的内容) |
'x' |
写入,如果文件已经存在会产生异常 |
'a' |
追加,将内容写入到已有文件的末尾 |
'b' |
二进制模式 |
't' |
文本模式(默认) |
'+' |
更新(既可以读又可以写) |
2.读取文本文件时,需要在使用open
函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为'r'
(如果不指定,默认值也是'r'
),然后通过encoding
参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码),如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就可能因无法解码字符而导致读取失败。
def main():
f = open('123.txt','r',encoding='utf-8')
print(f.read())
f.close()
if __name__ == '__main__':
main()
3.防止读写异常
将那些在运行时可能会出现状况的代码放在try
代码块中,在try
代码块的后面可以跟上一个或多个except
来捕获可能出现的异常状况。例如在上面读取文件的过程中,文件找不到会引发FileNotFoundError
,指定了未知的编码会引发LookupError
,而如果读取文件时无法按指定方式解码会引发UnicodeDecodeError
,我们在try
后面跟上了三个except
分别处理这三种不同的异常状况。最后我们使用finally
代码块来关闭打开的文件。
def main():
f = None
try:
f = open('123.txt','r',encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally:
if f:
f.close()
if __name__ == '__main__':
main()
4.读取文件的方式
有三种:一次性读取完成;使用for-in按行读取;使用readlines()按行读取到列表中;
使用with open()函数的时候可以不用f.open()函数,因为with open提供了一种自动关闭文件的功能。
import time
def main():
# 一次性读取整个文件内容
with open('123.txt',mode='r',encoding='utf-8') as f:
print(f.read())
# 通过for-in循环按行读取
with open('123.txt',mode='r',encoding='utf-8') as f:
for line in f:
print(line,end='')
time.sleep(1)
print()
# 读取文件按行读取到列表中
with open('123.txt',mode='r',encoding='utf-8') as f:
lines = f.readlines()
print(lines)
# with open提供了一种自动关闭文件的功能 if __name__ == '__main__':
main()
5.将文本信息写入文件文件,在使用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 factor in range(2,int(sqrt(n))+1):
if n % factor == 0:
return False
return True if n != 1 else False
def main():
filenames = ('a.txt','b.txt','c.txt')
fs_list = []
try:
for filename in filenames:
fs_list.append(open(filename,'w',encoding='utf-8'))
for number in range(1,10000):
if is_prime(number):
if number < 100:
fs_list[0].write(str(number)+'\n')
elif number < 1000:
fs_list[1].write(str(number)+'\n')
elif number <10000:
fs_list[2].write(str(number)+'\n')
except IOError as ex:
print(ex)
print('写文件时发生错误!')
finally:
for fs in fs_list:
fs.close()
print('操作完成!')
if __name__ == '__main__':
main()
6.读写二进制文件
示例是一个读图片文件写为一个新的图片文件
def main():
# 读一个图片文件并写一个图片文件
try:
with open('123.jpg','rb') as fs1:
data = fs1.read()
print(type(data))
with open('456.jpg','wb') as fs2:
fs2.write(data)
except FileNotFoundError as e:
print('指定的文件无法打开!')
except IOError as e:
print('读写文件时出现错误!') if __name__ == '__main__':
main()
7.关于JSON的读写
json模块主要有四个比较重要的函数,分别是:
dump
- 将Python对象按照JSON格式序列化到文件中dumps
- 将Python对象处理成JSON格式的字符串load
- 将文件中的JSON数据反序列化成对象loads
- 将字符串的内容反序列化成Python对象
序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)”。
8.写一个json文件
import json
def main():
mydict = {
'name': '马文飞',
'age': 20,
'qq': 1154196461,
'friends': ['翟华兵', '魏家剑','丁文杰','苏艺','秦旭壮'],
'cars': [
{'brand': 'BYD', 'max_speed': 180},
{'brand': 'Audi', 'max_speed': 280},
{'brand': 'Benz', 'max_speed': 320}
]
}
try:
with open('data.json','w',encoding='utf-8') as fs:
json.dump(mydict,fs)
except IOError as e:
print(e)
print('保存数据完成!')
if __name__ == '__main__':
main()
9.读json文件
import json
def main(): try:
with open('data.json','r',encoding='utf-8') as fs:
temp = json.loads(fs.read())
print(temp)
except IOError as e:
print(e)
if __name__ == '__main__':
main()
10.requests模块请求json数据
首先你要申请API
天行数据网址:https://www.tianapi.com/
代码中我自己申请的开封空气质量和开封天气的API,测试很好用,要是报错的话,需要自己申请API网址已给出。
import requests
import json def main():
# # 申请了一个查看空气质量的API 天行数据网址:https://www.tianapi.com/
resp = requests.get('http://api.tianapi.com/txapi/aqi/index?key=bcbdd890ed0b7fd449d6de8ebb71d8e0&area=开封')
data_model = json.loads(resp.text)
print(data_model['newslist'])
# 申请了一个查看空气质量的API
resp = requests.get('http://api.tianapi.com/txapi/tianqi/index?key=bcbdd890ed0b7fd449d6de8ebb71d8e0&city=开封')
data_model = json.loads(resp.text)
print(data_model['newslist']) if __name__ == '__main__':
main()
运行结果:
python学习(11)文件的读写操作的更多相关文章
- python中 对文件的读写操作 以及如何边写入 边保存flush()
转自:https://blog.csdn.net/t8116189520/article/details/78854708 首先 python中打开文件大致常用的几类如下: 1.写入文件write # ...
- Python对csv文件的读写操作
python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # ...
- python对excel文件的读写操作
import xlrd,xlwt data = xlrd.open_workbook('a.xlsx') #读 table = data.sheets()[0] data_list = [] data ...
- python学习9—文件基本操作与高级操作
python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...
- python学习8 文件的操作
本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...
- C++学习48 对ASCII文件的读写操作
如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...
- 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)
目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...
- python使用装饰器对文件进行读写操作'及遍历文件目录
'''使用装饰器对文件进行读写操作''' # def check_permission(func): # '''演示嵌套函数定义及使用''' # def wrapper(*args,**kwargs) ...
- Python中xlrd、xlwt、win32com模块对xls文件的读写操作
# -*- coding: utf-8 -*- #xlrd和xlwt只支持xls文件读写,openpyxl只支持xlsx文件的读写操作 import xlrd import xlwt import w ...
随机推荐
- TCP的分分合合(面试必问)
TCP连接与断开 目录 TCP连接与断开 前言 握手 挥手 最后 前言 相信面试过的小伙伴对这个话题应该不陌生,算是面试必问了,三次握手,四次挥手,以及其中的一些衍生问题. TCP/IP(Transm ...
- FZU 2150
题目大意:有一个矩阵,"."表示石头,"#",表示小草,有两个人,可以在任意两个位置点燃小草,小草可以上下左右蔓延,蔓延一次的时间为1,问所有蔓延完所有小草所花 ...
- vue-element-admin执行npm install 报错
如果你出现这类报错: 那么恭喜你,因为这个问题很好解决. ----------------------- 解决方法: git config --global url."https://&qu ...
- Unity Procedural Level Generator 基础总结与功能优化
Procedural Level Generator是在Unity应用商店中发布的一款免费的轻量级关卡生成器: 可以直接搜索关键字在应用商店中查找并下载. 和我之前生成关卡的想法不同,这个插件生成地图 ...
- Jenkins(2)- 更改插件源为国内源
如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html jenkins插件清华大学镜像地址 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第七周作业
1.问题描述 在前面的文章中,学习了系统调用system_call的处理过程,在MenuOS中运行getpid命令,通过gdb跟踪调用time函数的过程,并分析system_call代码对应的工作过程 ...
- python学习22之函数式编程
'''''''''1.高阶函数:将函数作为参数传递到另一个函数中,作为这个函数的参数,这样的方式叫高阶函数(1)map:两个参数,一个是函数,一个是iterator,将函数依次作用于Iterator中 ...
- 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...
- java 之 servlet简介
Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- 开发AI+诊疗生发系统,「先锋汇美」借力人工智能辅助诊疗实现头皮医学检测...
困扰年轻人的脱发问题萌生了新兴的产业链.36氪先前曾剖析过近来火热的植发市场,更多人则选择"防范于未然","头皮检测"服务备受关注.此前,人们对"头皮 ...