Python学习之文件的读写操作

2021-03-11 00:43

阅读:612

标签:写文件   函数   for   for-in循环   www   rgba   判断   list   指定   

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 :
fs_list[0].write(str(number)

+\n)
elif number :
fs_list[1].write(str(number)+\n)
elif number :
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学习之文件的读写操作

标签:写文件   函数   for   for-in循环   www   rgba   判断   list   指定   

原文地址:https://www.cnblogs.com/HackerEarl/p/14136779.html


评论


亲,登录后才可以留言!