第19讲 python中的文件

1、文件(file)

通过python来对计算机中的各种文件进行增删改查的操作
IO(Input、Output)

1.1 文件打开

文件操作步骤
1)打开文件
2)对文件进行各种操作(读写)
3)关闭
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
使用open()函数打开一个文件
参数:
file 要打开文件的名字(路径)

如果当前文件和目标文件在同一目录下,则可以直接打开

file_name =  'G:/python/foo.txt'
file_obj = open(file_name)
#read()方法来读取文件的内容,他会将昂内容全部保存到一个字符串返回
content = file_obj.read()
print(content)

上面程序读取 foo.txt 内容:
我是foo文件

1.2 关闭文件

1.2.1 with … as 语句 使用完后自动关闭文件

file_name = 'G:/python/foo.txt'
try:
    with open(file_name) as file_obj:
        #with语句中可以直接使用file_obj来操作文件
        #此时这个文件只能在with中使用,一旦with结束文件会自动close()关闭
        print(file_obj.read())
except FileNotFoundError:
    print(f'{file_name} 文件不存在')

上面程序读取 foo.txt 内容:
我是foo文件

标准的一个操作文件的代码

try:
    with open('XXX') as file_obj:
        pass
except FileNotFoundError:
    pass

1.2.2 close()方法关闭文件

file_name =  'G:/python/foo.txt'
file_obj = open(file_name)
content = file_obj.read()
file_obj.close()
print(content)

建一个demo2.txt文件输入一首诗
白日依山尽
黄河入海流
欲穷千里目
更上一层楼

2、标准的一个操作文件的代码结构

通过read()函数读取文件的内容
调用open()来打开一个文件,可以将文件分成两种类型:

  • 一种 是纯文本文件(使用utp-8的编码写的文本文件)
  • 二种 是二进制文件(图片、音频、ppt等文件)

open() 这个函数打开文件时,默认是以纯文本文件形式打开的,处理文本文件时,有时候需要指定文件的编码;

  • 如果直接调用read()这个函数,它会将文本内容全部读取;
  • 如果要读取的内容比较大的情况,会一次性将文件的内容加载到内存中,容易导致内存泄漏;

read()函数可以接收一个size作为参数,该参数用来指定读取字符的数量:

  • 默认值是-1.它会读取文件中所有的字符;
  • 可以为size指定一个值,这样read()函数会读取指定适量的字符;
  • 每次读取都是从上次读取到的位置开始读取;
  • 如果字符的数量小于指定的size,则会读取剩余所有的字符;

2.1 标准的一个操作文件的代码结构


file_name = 'demo2.py'
try:
    with open(file_name,encoding='utf-8') as file_obj:
        content = file_obj.read(7)
        # help(file_obj.read)
        print(content)
        print(len(content))
        #定义一个变量,用来保存文件内容
except FileNotFoundError:
    print(f'{file_name}文件不存在')

上面程序返回值:
白日依山尽

7

2.2 较大文件的读取

file_name = 'demo2.py'
try:
    with open(file_name,encoding='utf-8') as file_obj:
        #定义一个变量,用来保存文件内容
        file_content = ''
        #定义一个变量,指定每次读取字符的大小
        c = 2
        #创建一个循环读取文件内容
        while True:
            content = file_obj.read(c)
            #设置停止的条件
            if not content:
                #内容读取完毕,退出循环
                break
            file_content += content
except FileNotFoundError:
    print(f'{file_name}文件不存在')

print(file_content)

3、其它读取方式

3.1 readline() 读取一行

file_name = 'demo2.py'
file_content = ''
try:
    with open(file_name, encoding='utf-8') as file_obj:
        print(file_obj.readline(), end='')
        print(file_obj.readline(), end='')
except FileNotFoundError:
    print(f'{file_name}文件不存在')        

上面程序返回值:
白日依山尽
黄河入海流

3.2 readlines()

readlines()该方法也是用于一次读取一行的读取内容,它会将读取到的内容封装到列表中返回

file_name = 'demo2.py'
file_content = ''

try:
    with open(file_name, encoding='utf-8') as file_obj:
        file_content = file_obj.readlines()
        print(file_content)
except FileNotFoundError:
    print(f'{file_name}文件不存在')

上面程序返回值:
[‘白日依山尽\n’, ‘黄河入海流\n’, ‘欲穷千里目\n’, ‘更上一层楼’]

3.3 for 循环取数据

file_name = 'demo2.py'
file_content = ''

try:
    with open(file_name, encoding='utf-8') as file_obj:
        #readlines()该方法也是用于一次读取一行的读取内容,它会将读取到的内容封装到列表中返回
        file_content = file_obj.readlines()
        for i in file_content:
            print(i, end='')
except FileNotFoundError:
    print(f'{file_name}文件不存在')

4、文件的写入

write()向文件中写入内容x
如果操作的是一个文本文件的时候,write()函数需要我们传递一个字符串作为参数
使用open()函数打开文件时需要指定打开文件所要的操作(读、写、追加)
如果不指定操作类型,默认时以读取文件,而读取文件时不能向文件中去写入的
r 表示只读
w 表示可以写,我们使用w来写入文件,如果文件不存在,则会创建文件,如果不存在则会覆盖文件内容
a 表示追加内容,如果文件不存在会创建文件,如果文件存在,则会向文件中追加内容

  • 为操作符增加功能
    r+ 既可读又可写,文件不会报错
    x 用来创建文件,如果文件不存在,则创建文件,如果存在就报错
file_name = 'demo2.py'
file_content = ''
try:
    with open(file_name,'w',encoding='utf-8') as file_obj:
        file_obj.write('aaaaaaaaaaaaaaaaa\n')
        file_obj.write('bbbbbbbbbbbbbbbb\n')
        #不能写入数字
        file_obj.write(456)
except FileNotFoundError:
    print(f'{file_name}文件不存在')

file_obj.write(456) 代码报错:
TypeError: write() argument must be str, not int

5、二进制文件的读取

所有文本文件以外的文件都是二进制文件
读取模式
t 读取文本文件(默认值)
b 读取二进制文件

file_name = r'G:/FastStone Capture/20200107_151157.png'
file_content = ''
try:
    # with open(file_name,'r',encoding='utf-8') as file_obj:
    with open(file_name,'rb') as file_obj:
        #读取文本文件时,size时以字符为单位
        #读取二进制文件时,size是以字节为单位

        #将读取的内容写出来
        #定义一个新的文件
        new_name = 'abc.png'
        # file_content = file_obj.read(100)
        # print(file_content)
        with open(new_name,'wb') as new_obj:
            #定义每次读取的大小
            c = 1024 * 100
            while True:
                #从已有的对象中读取数据
                file_content = file_obj.read(c)
                if not file_content:
                    break
                #将读取的数据写入新的对象当中
                new_obj.write(file_content)


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

新生成的abc.png 文件
在这里插入图片描述

6、读取文件的位置

tell() 方法用来检查当前读取的位置
seek() 可以修改当前读取的位置
参数:0从头开始默认;1从当前位置;2从最后位置
中文一个汉字占用3个位置seek设置的时候应该时3的倍数

with open('demo2.py', 'r', encoding='utf-8') as file_obj:
    file_obj.seek(17)
    print(file_obj.read())
# 中文一个汉字占用3个位置seek设置的时候应该时3的倍数
    print('当前读取了-->', file_obj.tell())

黄河入海流
欲穷千里目
更上一层楼

当前读取了–> 70

7、文件的其他操作

os.getwd() 获取当前所在的目录
切换盘符

import os
#获取当前目录下文件列表
r = os.listdir('..')

# 切换盘符
os.chdir('c:/')

# os.getwd() 获取当前所在的目录
r = os.getcwd()
print(r)

# 创建目录
os.mkdir('abd')
#删除目录
os.rmdir('abd')

上面程序返回:
c:\

发布了31 篇原创文章 · 获赞 0 · 访问量 340

猜你喜欢

转载自blog.csdn.net/weixin_38027481/article/details/104100691