Python基础第16讲 - Python文件

Python基础第16讲 - Python文件

文件(File)

通过Python来对计算机中的各种文件进行增删改查的操作
I/O(Input/Output)

一、文件打开

操作文件的步骤
1、打开文件
2、对文件进行各种操作(读、写)
3、关闭

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
使用open()函数来打开一个文件
'''
参数:
file :要打开文件的名字(路径)

返回值:返回的是一个对象,这个对象就是代表了当期打开的文件

'''
# 如果目标文件和当前文件在同一个目录下,则直接使用文件名即可打开
file_name = 'demo.txt'
file_name1 = 'adc/demo1.txt'
file_name2 = 'D:/新桌面/任务.txt'


print(open(file_name))   # 没报错既可以打开,<_io.TextIOWrapper name='demo.txt' mode='r' encoding='cp936'>
print(open(file_name1))  # <_io.TextIOWrapper name='adc/demo1.txt' mode='r' encoding='cp936'>
print(open(file_name2))  # <_io.TextIOWrapper name='D:/新桌面/任务.txt' mode='r' encoding='cp936'>

# read()方法来读取文件的内容,它会将内容全部保存到一个字符串返回
file_obj = open(file_name)
content = file_obj.read()
print(content)
# 关闭文件
# close()方法用来关闭方法

file_obj.close()
# 读取
# file_obj.read()   # 关闭后读  会报错
with ...  as  ... 语句  为文件设置的
with open(file_name4) as file_obj   ==>   file_obj = open(file_name)

标准的一个操作文件的代码
try:
    with open('xxx') as file_obj:
        pass
except FileNotFoundError:
    pass

file_name4 = 'demo.txt'
with open(file_name4) as file_obj:

    # 在 with语句中可以直接使用file_obj来操作文件
    # 此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭
    print(file_obj.read())

print(file_obj.read())
'''
案例2
'''
# file_name5 = 'abc'
try:
    with open(file_name5) as file_obj:

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

调用open()来打开一个文件,可以将文件分车成两种类型

     1、纯文本文件(使用UTF-8等编码写的文本文件)
     2、二进制文件(图片、音频、PPT、视频等文件)
     open()这个函数打开文件时,默认是以文本文件的形式打开的
file_name = 'demo2.txt'

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

        # 通过read()函数来读取文件的内容
        # 调用open()来打开一个文件,可以将文件分车成两种类型
        # 1、纯文本文件(使用UTF-8等编码写的文本文件)
        # 2、二进制文件(图片、音频、PPT、视频等文件)
        # open()这个函数打开文件时,默认是以文本文件的形式打开的
        content = file_obj.read()
        print(content)

except FileNotFoundError:

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

二、较大文件的读取

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

read()函数可以接收一个size作为参数,该参数用来指定读取的字符的数量
默认值是-1 它会读取文件中所有的字符
可以为size指定一个值,这样read()函数会读取指定数量的字符
每一次读取都是从上次读取到的位置开始读取
如果字符的数量小于size,则会读取剩余所有的字符
file_name = 'demo.txt'

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

        # 通过read()函数来读取文件的内容
        # 调用open()来打开一个文件,可以将文件分成两种类型
        # 一种 是纯文本文件(使用utf-8等编码写的文本文件)
        # 一种 是二进制文件(图片、音频、PPT等文件)
        # open()这个函数打开文件时,默认是以文本文件的形式打开的
        # 处理文本文件时,有时候需要制定文件的编码
        # 如果直接调用read()这个函数,它会将文本内容全部读取
        # 如果要读取的内容文件比较大的情况,会一次性将文件的内容加载到内存中,容易导致内存泄漏
        # read()函数可以接收一个size作为参数,该参数用来指定读取的字符的数量
        # 默认值是-1 它会读取文件中所有的字符
        # 可以为size指定一个值,这样read()函数会读取指定数量的字符
        # 每一次读取都是从上次读取到的位置开始读取
        # 如果字符的数量小于size,则会读取剩余所有的字符
        # content = file_obj.read(1)
        # content = file_obj.read(6)
        # content = file_obj.read(6)
        # # help(file_obj.read)
        # print(content)
        # print(len(content))

        # 定义一个变量 用来保存文件的内容
        file_content = ''

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

            # 设置停止的条件
            if not content:
                # 内容读取完毕 退出循环
                break
            # print(content,end='')

            file_content += content




except FileNotFoundError:

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

print(file_content)

三、其他的读取方式

readline()

'''
readline()  可以用来读取一行内容
'''
file_name = 'demo2.txt'

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

    # readline()  可以用来读取一行内容
    # print(file_obj.read())
    print(file_obj.readline(),end='')
    print(file_obj.readline())

readlines()

'''
readlines() readlines()  也是用于一行一行的读取内容,一次性读取封装到一个列表中返回
'''
file_name = 'demo2.txt'

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

    # readlines()  也是用于一行一行的读取内容,一次性读取封装到一个列表中返回
    print(file_obj.readlines()[1])   # 黄河入海流

四、文件的写入

r 表示只读

 w 表示可以写 所以我们可以使用w来写入文件,如果文件不存在会创建文件,如果文件存在则会覆盖原文件的内容
 a 表示追加内容 如果文件不存在会创建文件,如果文件存在则会像文件中追加内容
 + 为操作符增加功能
 r+ 既可读又可写,文件不会报错

 x 用来创建文件,如果文件不存在就创建,如果存在就报错
file_name = 'demo3.txt'

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

    # write()向文件中写入内容
    # 如果要操作的是一个文本文件的时候,write()函数需要我们传递一个字符串作为参数
    # 使用open()函数打开文件时需要制定打开文件所要的操作(读 写 追加)
    # 如果不指定操作类型,默认是以 读取文件,而读取文件是不能像文件中去写入的
    file_obj.write('aaaaaaaaaa\n')
    file_obj.write('bbbbbbbbbb\n')
    file_obj.write('cccccccccc\n')
    file_obj.write(str(456))

五、二进制文件

'''
读取模式
t 去取文本文件(默认值)
b 读取二进制文件
'''


file_name = r'H:\计算机要点\文件\Kalimba.mp3'

with open(file_name,'rb') as file_obj:
    # 读取文本文件时,size是以字符为单位
    # 读取二进制文件时,size是以字节为单位

    # 将读取的内容写出来
    # 定义一个新的文件
    new_name = 'abc.mp3'
    # print(file_obj.read(100))
    with open(new_name,'wb') as new_obj:

        # 定义每次读取的大小
        c = 1024 * 100

        while True:

            # 从已有的对象中读取数据
            content = file_obj.read(c)

            # 内容读取完毕,循环终止
            if not content:
                break
            # 将读取到的数据写入新的对象当中
            new_obj.write(content)

七、读取文件的位置

'''
tell() 方法用来检查当前读取的位置
seek() 可以修改当前读取的位置
参数:0 从头开始 默认
	 1 从当前位置
     2 从最后位置计算
'''


with open('demo3.txt','rb') as file_obj:

    # file_obj.seek(10)

    print(file_obj.read())

    # tell() 方法用来检查当前读取的位置
    # seek() 可以修改当前读取的位置
    # 参数:0 从头开始 默认
    #      1 从当前位置
    #     2  从最后位置计算
    print('当前读取到了-->',file_obj.tell())

八 、文件的其他操作

listdir() 获取当前目录结构
r = os.listdir('..')

os.getcwd() 获取当前所在的目录
os.rmdir('adc')

创建目录 在当前目录创建
os.mkdir('abc')
r = os.getcwd()
print(r)
发布了46 篇原创文章 · 获赞 4 · 访问量 1307

猜你喜欢

转载自blog.csdn.net/Yauger/article/details/102906708