文件读取和写入

本文详细讲解了如何使用Python的open()函数进行文件操作,包括不同模式的使用,异常处理策略,以及json模块的使用,如读写文件和数据序列化/反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

open()返回一个文件对象,open(filename,mode)

f = open('workfile','w')

第一个参数是包含文件名的字符串,第二个参数可以是包含一些字符的字符串

'r':仅读取文件, 'w':仅写入文件,'a'打开文件以进行添加的模式

'r+'打开文件进行读取和写入,模式参数是可选的。'r'如果省略,将被假定。

'b'附加模式的文件将以二进制模式打开。此模式应用于所有不包含文本的文件。

如果不使用with关键字,则应调用发f.close(),关闭文件并立即释放文件使用的所有系统资源。

如何读取纯文本的文件:

def main():
    f = open(' 文件名', 'r')
    print(f.read())
    f.close()


if __name__ == '__main__':
    main()

open函数指定的文件不存在或者无法打开,会引起异常状况,导致程序崩溃,我们可以用python的异常机制对可能在运行时发生状况的代码进行适当的处理:

def main():
    f = None
    try:
        f =open('C:\dafef\Desktop2916734751.txt', 'r')
        print(f.read())
    except FileNotFoundError:
        print('无法打开指定的文件')
    except LookupError:
        print('指定了未知的编码')
    except UnicodeDecodeError:
        print('读取文件时解码错误')
    finally:
        if f:
            f.close()
if __name__ == '__main__':
    main()

用with处理,在处理文件时,最好使用关键字,即使在某个时候引发了异常,文件在其套件完成后也会正确关闭,使用with语句,相对于try-finally块短得多。

def main():
    try:
        with open('C:\dafef\Desktop2916734751.txt', 'r') as f:
            print(f.read())
    except FileNotFoundError:
        print('无法打开指定的文件')
    except LookupError:
        print('指定了未知的编码')
    except UnicodeDecodeError:
        print('读取文件时解码错误')
        
if __name__ == '__main__':
    main() 

在try代码块的后面跟上一个或多个except来捕获可能出现的异常情况。

除了read方法读取以外还可以用for-in循环逐行读取和readlines将文件按行读取到一个列表容器中:

import time


def main():
    with open(' ','r')as f:
        print(f.read())
    #for  in 逐行读取
    with open('','r') as f:
        for line in f:
            print(line, end='')
            time.sleep(0.5)
    print()
    #读取文件按行读取到列表中
    with open('','r') as f:
        lines = f.readlines()
    print(lines)
if __name__ == '__main__':
    main()

写文件时将文件模式设置为'w'

如何将1-100间的素数写入两个文件中:

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 = ('z.txt', 'b.txt')
    fs_list = []
    try:
        for filename in filenames:
            fs_list.append(open(filename, 'w' ))
        for number in range(1, 100):
            if is_prime(number):
                if number < 50:
                    fs_list[0].write(str(number) + '\n')
                elif number < 100:
                    fs_list[1].write(str(number) + '\n')
    except IOError as ex:
        print(ex)
        print('写文件时发生错误')
    finally:
        for fs in fs_list:
            fs.close()
    print('操作完成')


if __name__ == '__main__':
    main

读写json文件

读取文件:

import json
test = {'苹果': 12, '香蕉':13, '橙子': 14}
print(test)
print(type(test))
json_str = json.dumps(test)
print(json_str)
print(type(json_str))

使用Python中的json模块将字典或列表以JSON格式保存到文件中:

import json


def main():
    mydict = {
        'name': '怼怼',
        'age': '19',
        'like': 'apple'
    }
    try:
        with open('data.json','w') 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对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值