<jupyter_start><jupyter_text>读写文本文件读取文本文件时，需要用open函数，文件模式设置成‘r’（如果不指定，默认值也是‘r’）<jupyter_code>def main():
    f = open('ad.txt','r')
    print(f.read())
    f.close()
if __name__ == '__main__':
    main()<jupyter_output>谁最帅！
你最帅！
再说一次，谁最帅
我最帅！<jupyter_text>如果open函数指定的文件并不存在或者无法打开，那么将引发异常状况导致程序崩溃。为了让代码有一定的健壮性和容错性,以使用Python的异常机制对可能在运行时发生状况的代码进行适当的处理<jupyter_code>def main():
    f = None
    try:
        f = open('asd.txt','r')
        print(f.read())
    except FileNotFoundError:
        print('无法打开指定文件')
    except LookupError:
        print('指定了未知的编码')
    except UnicodeDecodeError:
        print('读取文件时解码错误')
    finally:
        if f:
            f.close()
if __name__ == '__main__':
    main()
def main():
    try:
        with open('asd.txt', 'r') as f:
            print(f.read())
    except FileNotFoundError:
        print('无法打开指定的文件!')
    except LookupError:
        print('指定了未知的编码!')
    except UnicodeDecodeError:
        print('读取文件时解码错误!')


if __name__ == '__main__':
    main()<jupyter_output><jupyter_text>除了使用文件对象的read方法读取文件之外，还可以使用for-in循环逐行读取或者用readlines方法将文件按行读取到一个列表容器中<jupyter_code>import time
def main():
    # 一次性读取整个文件内容
    with open('ad.txt','r') as f:
        print(f.read())
        
    #  通过for-in循环逐个读取
    with open('ad.txt','r') as f:
        for line in f:
            print(line,end="")
            time.sleep(0.5)
    print()
    
    
    # 读取文件按行读取到列表中
    with open('ad.txt') as f:
        lines = f.readlines()
        print(lines)
        
        
if __name__== '__main__':
    main()<jupyter_output>谁最帅！
你最帅！
再说一次，谁最帅
我最帅！
谁最帅！
你最帅！
再说一次，谁最帅
我最帅！
['谁最帅！\n', '你最帅！\n', '再说一次，谁最帅\n', '我最帅！']<jupyter_text>将文本信息写入把open函数的文件模式设置为‘w’ 将1~9999 之间的素数分别写入三个文件中（1-99之间的素数保存在a.txt中，100-999之间的素数保存在b.txt中，1000-9999之间的素数保存在c.txt中）。<jupyter_code>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='gbk'))
        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')
                else:
                    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()<jupyter_output>操作完成!<jupyter_text>读取二进制文件<jupyter_code>def main():
    try:
        with open('dongna.jpg','rb') as fs1:
            data = fs1.read()
            print(type(data))
        with open('dongna.jpg','wb') as fs2:
            fs2.write(data)
    except FileNotFoundError as e:
        print('指定的文件无法打开.')
    except IOError as e:
        print('读写文件时出现错误.')
    print('程序执行结束.')


if __name__ == '__main__':
    main()<jupyter_output><class 'bytes'>
程序执行结束.<jupyter_text>读写JSON文件如果希望把一个列表或者一个字典中的数据保存到文件中又该怎么做呢？答案是将数据以JSON格式进行保存JSON是“JavaScript Object Notation”的缩写，它本来是JavaScript语言中创建对象的一种字面量语法<jupyter_code>import json
def main():
    mydict = {
        'name':'hanhan',
        'age':'47',
        'qq':12345689,
        'friends':['试试','郍郍'],
        'cars': [
            {'brand': 'BYD', 'max_speed': 180},
            {'brand': 'Audi', 'max_speed': 280},
            {'brand': 'Benz', 'max_speed': 320}
        ]
    }
    try:
        with open('data.json','w') as fs:
            json.dump(mydict,fs)
    except IOError as e:
        print('保留数据完整')
        
if __name__ == '__main__':
    main()<jupyter_output><empty_output><jupyter_text>json 模块主要有四个比较重要的函数，分别是：dump--将python对象按照json格式序列化到文件中dumps- 将python对象处理成json格式的字符串load - 将文件中的json数据反序列化成对象loads- 将字符串的内容发序列化成python对象<jupyter_code>import requests
import json
def main():
    resp = requests.get('http://api.tianapi.com/guonei/?key=APIKey&num=10')
    data_model = json.loads(resp.text)
    for news in data_model['newslist']:
        print(news['title'])
        
if __name__ == '__main__':
    main()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14664187775970253, 'fraction_numerical': 0.016267720195212644, 'mean_word_length': 2.6598639455782314, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '553722', 'license': 'Apache-2.0', 'n_tokens_mistral': 2040, 'n_tokens_neox': 2019, 'n_words': 270, 'path': 'Day11.ipynb', 'repo_name': 'hdbnl1122/python100', 'size': '4303'}