文件操作基础之读写文件

一、读写文本文件

1.read

例子:

def main():
    f = open('致橡树.txt', 'r', encoding='utf-8')
    print(f.read())
    f.close()



if __name__ == '__main__':
 main()

在这里插入图片描述

这里没有致橡树.txt文件,所以报错。

指定encoding的目的是:不指定的话默认值是None,这样读取文件时使用的是操作系统默认的编码

将代码重构一下

def main():
#    f = None
    try:
        f = open('致橡树1.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()

在这里插入图片描述

使用try: except: 来判断文件一系列的错误

except FileNotFoundError:

在找不到文件时输出’无法打开指定文件!’

2.for-in

例子:

import time


def main():

       # 一次性读取整个文件内容
       with open('致橡树.txt', 'r', encoding='utf-8') as f:
           print(f.read())

       # 通过for-in虚幻逐行读取
       with open('致橡树.txt',mode='r', encoding='utf-8') as f:
            for line in f:
                print(line,end='')
                time.sleep(0.5)
       print()

       # 读取文件按行读取到列表中
       with open('致橡树.txt', encoding='utf-8') as f:
           lines =f.readlines()
       print(lines)


if __name__ == '__main__':
    main()

在这里插入图片描述

3.将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')
                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()

在这里插入图片描述

这时a.txt、b.txt、c.txt会自动创建,且里面的内容符合要求。

二、读写二进制文件

1.复制图片文件

def main():
    try:
        with open('bizhi2.jpg', 'rb') as fs1:
            data = fs1.read()
            print(type(data)) # <class 'bytes'>
        
        # 复制图片
        with open('tupian1.jpg', 'wb') as fs2:  
            fs2.write(data)

    except FileNotFoundError as e:
        print('指定文件无法打开.')

    except IOError as e:
        print('读写文件时出现错误.')
    print('程序执行结束.')

if __name__ == '__main__':
 main()

在这里插入图片描述

结果

在这里插入图片描述

若没有tupian1.jpg文件会自动创建,

若已存在tupian1.jpg文件则会覆盖该文件内容

发布了134 篇原创文章 · 获赞 16 · 访问量 6334

猜你喜欢

转载自blog.csdn.net/weixin_46108954/article/details/104649089