Python 文件 —— 读取 与 写入

Python 学习笔记

一、打开文件

  • 通过 python 程序来对计算机的各种文件进行增删改查的操作,其实文件就是一个 IO (Input/Output)

1.1、使用 open() 函数:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • 参数 file: 要打开文件的名字(路径)
  • 返回值: 返回了一个对象,这个对象就代表了当前打开的这个文件
# 如果目标文件和当前文件在同一级目录下, 则直接使用文件名即可
file_name = 'demo.txt'

# 如果目标文件和当前文件不在同一级目录下
# file_name = 'hello/demo.txt'

# 因为绝对路径中存在转义字符 '\*'  C:\Users\ZC-WXB75\Desktop\demo.txt , 所以要修改一下:
# file_name = 'C:\\Users\\ZC-WXB75\\Desktop\\demo.txt'
# file_name = r'C:\Users\ZC-WXB75\Desktop\demo.txt'
# file_name = 'C:/Users/ZC-WXB75/Desktop/demo.txt'

file_obj = open(file_name)
print(file_obj)

1.2、使用 with... as ... 打开

file_name = 'demo.txt'

with open(file_name) as file_obj:
    print(file_obj.read())

1.3、异常处理

# file_name = 'demo.txt'
file_name = 'abc.txt'

try :
    with open(file_name) as file_obj:
        print(file_obj.read())
        
except FileNotFoundError:
    print(f'{file_name}文件不存在')             			# f '{变量名}'  用来传递变量(在前面数据类型有说过)



二、读取文件


2.1、文件简单读取

  • 调用 open() 来打开一个文件,可以将文件分为 2 种类型
    一种是: 纯文本文件( open() 的默认打开方式, 使用 utf-8 等编码编写的文件)
    另一种是: 二进制文件(音乐、图片…)
file_name = 'demo.txt'

try :
    # with open(file_name) as file_obj:					# 没有定义编码类型, 文件有中文会报错
    with open(file_name,encoding='utf-8') as file_obj:	# 可读中文
        print(file_obj.read())
        
except FileNotFoundError:
    print(f'{file_name}文件不存在')

2.2、读取大文件

  1. read() 函数,它会默认将文件中内容全部读取出来。若文件很多 (如,几个T),这样就会对我们的内存等消耗较大
  2. read() 函数可以接收一个size作为参数 (默认是 -1),该参数可以用来指定读取字符的数量
'''
葡萄美酒月光杯,
欲饮琵琶马上催.
醉卧沙场君莫笑,
古来征战几人回.
'''

file_name = 'demo.txt'

try:
    with open(file_name, encoding='utf-8') as file_obj:
        # help(file_obj.read)							# 可看到 read 函数里有一个参数, 默认为 -1
        
        # content = file_obj.read(8)					# 可更改数值观察效果
        # content = file_obj.read(9)
        content = file_obj.read()
        print(content)
        print(len(content))								# 35 个, 每一行后面都有一个换行符(除最后一行)

except FileNotFoundError:
    print(f'{file_name} 这个文件不存在!')
  1. 重复调用时,每一次读取都会接着上次的网下读取
file_name = 'demo.txt'

try:
    with open(file_name, encoding='utf-8') as file_obj:
        # help(file_obj.read)
        content = file_obj.read(9)
        content = file_obj.read(9)
        content = file_obj.read(9)
        print(content)									# 输出:醉卧沙场君莫笑,
        print(len(content))

except FileNotFoundError:
    print(f'{file_name} 这个文件不存在!')
  1. 如果字符的数量小于指定的 size,则会读取所剩余的所有的内容
  2. 如果没有内容会返回一个‘’空串

FINAL:若是读大文件,我们可以使用循环来完成,进行固定数量字符的读取输出。

file_name = 'demo.txt'

try:
    with open(file_name,encoding='utf-8') as file_obj:

        c = 100               							# 定义一个变量 指定每次读取的大小
        while True:           							# 创建一个循环来读取文件的内容
            content = file_obj.read(c)

            if not content:             				# 检查是否读取到了内容
                break                   				# 没有内容,退出循环
            print(content)
            # print(content,end='')     				# 若不想自动换行, 可加 end=''

except FileNotFoundError:
    print(f'{file_name}这个文件不存在!')

2.3、其他读取方法

  1. readline() 函数可以读取每一行的内容
file_name = 'demo.txt'

with open(file_name, encoding='utf-8') as file_obj:
    print(file_obj.readline())
    print(file_obj.readline())
    print(file_obj.readline())
    print(file_obj.readline())
  1. readlines() 函数可以把读取的每一行的内容,作为列表的元素,返回一个列表当中
file_name = 'demo.txt'

with open(file_name, encoding='utf-8') as file_obj:
    file_objs = file_obj.readlines()

for i in file_objs:
    print(i)

2.4、读取文件位置

  • tell() 函数检查当前读取的位置
  • seek() 函数可以修改当前位置读取的函数
    第一个参数: 注意,如果文件内容是中文,则参数要为 3 的倍数( 1 汉字 = 3 字母 )
    第二个参数: 0 ,从头开始计算(默认);1 ,从当前位置计算;2 ,从最后位置计算
with open('demo.txt','r',encoding='utf-8') as file_obj:

    print(file_obj.read(5))

    file_obj.seek(3)            						# 第二个参数默认为 0

    print(file_obj.read())
    
    print('当前读取到了 --> ', file_obj.tell())



三、写入文件


3.1、写入文字

  • open() 函数的第二个参数 mode
    r: 表示只读 ( open()函数默认是 r )
    w: 表示是可写 ,如果文件不存在它会创建一个文件,如果文件存在则会覆盖原文件的内容
    a: 表示追加内容,即不会覆盖原来文件的内容
    +: 为操作符增加功能
    r+: 既可以读取,又可以写入
    x: 用来创建新的文件,如果不存在就创建,如果存在就报错
file_name = 'demo.txt'

with open(file_name, 'a', encoding='utf-8') as file_obj:
    file_obj.write('bbb')
    file_obj.write('ccc\n')     						# 想换行, 可以加转义符
    file_obj.write(str(11))     						# 只能写入字符串(可写入整数验证)
file_name = 'demo.txt'

with open(file_name, 'r+', encoding='utf-8') as file_obj:
    file_obj.write('ok')
    file_objs = file_obj.readlines()

for i in file_objs:
    print(i)
  • 其他可以自己尝试 …

3.2、读取并写入二进制文件

  • 读取模式:
    t : 读取文本文件(默认),读取文本文件时,size 是以字符为单位
    b: 读取二进制文件,读取文件是二进制文件时,size 以字节为单位(3 字节 = 1 字符)
file_name = 'Kalimba.mp3'               				# 若是绝对路径, 注意路径的写法

with open(file_name,'rb') as file_obj:  				# rb 读取二进制文件
    name = 'Music.mp3'                  				# 定义一个新的文件

    with open(name,'wb') as new_obj:    				# wb 写入二进制文件
        c = 1024 * 100                  				# 定义每次读取的大小

        while True:
            content = file_obj.read(c)

            if not content:             				# 读完之后的判断
                break

            new_obj.write(content)



四、关闭文件


4.1、用 open () 打开的文件,只需要调用函数 close() 即可

file_name = 'demo.txt'

file_obj = open(file_name)
content = file_obj.read()
file_obj.close()
print(content)

# print(file_obj.read())								# 取消注释出现异常, 说明文件已关闭

4.2、用 with... as ... 语句打开的文件,不需要手动关闭

file_name = 'demo.txt'

with open(file_name) as file_obj:
    print(file_obj.read())

# print(file_obj.read())              					# 取消注释出现异常, 说明文件已关闭



五、文件的其他操作

  • 使用 os 模块
import os

os.listdir() # 获取当前目录结构
# r = os.listdir()
r = os.listdir('..')        							# 默认是 '.' , '..' 表示上一级
print(r, '\n')

os.getcwd()                 							# 获取当前所在目录的路径
r = os.getcwd()
print(r, '\n')

os.mkdir('abc')             							# 创建目录
print(os.listdir(), '\n')

os.rmdir('abc')             							# 删除目录
print(os.listdir(), '\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值