day6打开文件

"""
打开文件:
open()函数:可以打开一个文件,得到一个文件file对象,而file对象提供相关的方法对文件内容进行读写等操作。
open()函数有若干个参数,比较重要的是以下三个参数:
    1、文件路径:指定需要打开的文件的文件路径
    2、打开模式:针对不同文件(二进制文件、文本文件)以及不同操作(读操作、写操作),会有不同的打开模式。
       在打开文本文件时并不需要特别指定模式t,因为默认就是以文本方式打开文件的
    3、编码:设定打开文件的默认编码
注意:为了安全操作文件,文件使用完毕后,需要使用close()函数正确关闭。

常用的打开模式:
    t:文本模式(默认)
    x:写模式,新建一个文件
    b:二进制模式,打开二进制文件
    +:更新一个文件(可读可写)
    r:以只读模式打开一个文件
    rb:以二进制格式只读模式打开一个文件
    w:打开一个文件进行写入,如果文件内容已存在,会清除原有的内容
    wb:以二进制格式只写模式打开一个文件,会清除原有的内容
    a:打开一个文件并追加内容,会往文件尾部添加内容
    ab:以二进制格式打开一个文件并追加内容,会往文件尾部添加内容
    w+:打开一个文件进行读写,如果文件内容已存在,会清除原有的内容
    a+:打开一个文件并使用追加进行读写
"""

# 相对路径:
f = open('test.txt', 'r')
print(type(f))      # <class '_io.TextIOWrapper'>
f.close()

# 绝对路径:
f1 = open(r'D:/api_auto/study_node/s_2023_03_07/test.txt', 'r')
print(type(f1))      # <class '_io.TextIOWrapper'>
f1.close()

# 通过sys.path获取路径
import sys
path_ = sys.path[0]
print(path_)
f2 = open(fr'{path_}\test.txt', 'r')
print(type(f2))
f2.close()



"""
打开二进制文件:
除了文本以外,还有大量的非文本文件,比如图片、压缩文件、视频文件、音乐文件等等,这种文件统称为二进制文件。

常用的打开模式:
    b:二进制模式,打开二进制文件
    a:打开一个文件并追加内容,会往文件尾部添加内容
    wb:以二进制格式只写模式打开一个文件,会清除原有的内容
    ab:以二进制格式打开一个文件并追加内容,会往文件尾部添加内容
    rb:以二进制格式只读模式打开一个文件
"""
f3 = open(r'D:\123.jpg', 'rb')
f3.close()



"""
读取文件内容:
    1、read():读取文件对象中的若干个字符,它提供一个参数size,可以指定读取字符的数量。
    2、readline():读取一行的所有字符,可加size字符限制
    3、readlines():读取多行字符,返回一个列表。它提供一个hint参数,表示指定读取的行数,没有指定则默认以列表的形式返回文件所有的字符串
如下例:当read()之后,访问文件的游标就会移动到第六个字符前面,此时,继续read,将得到Hello后面的结果。
"""
f4 = open('test.txt', 'r')
s = f4.read(5)
print(s)

s1 = f4.read(8)
print(s1)
"""
打印结果:
Hello
 World
"""

s2 = f4.readline()      # 不带限制参数就默认读一行数据
s3 = f4.readline(8)
print(s2, s3)
"""
打印结果:
Hello Python.
 Hello Im
"""

s4 = f4.readlines(22)   # 读完目前光标所在的行,22字符限制并未读完Hello Python2,但是返回结果把整行都返回了
s5 = f4.readlines()
print(s4)
print(s5)

"""
打印结果:
['ooc.\n', 'Hello World2.\n', 'Hello Python2.\n']
['Hello Imooc2.\n', 'Hello World3.\n', 'Hello Python3.\n', 'Hello Imooc3.']
"""

# 练习:实现一个read.py文件,把read.py文件的内容打印出来
fe = open('read.py')    # 读取文本文件,打开模式默认为t,可不写
a = fe.readlines()
print(a)



"""
把字符串写入文件:写入文件时不需要新建文件,会自动生成
write():写入一个字符串
writelines():向文件内容写入多行数据,它接受一个列表,表示需要写入的字符串列表
"""
f = open('test_02.txt', 'w')
f.write('Hello world!')

lines = ['Hello World\n', 'Hello Python\n', 'Hello Imooc\n']
f.writelines(lines)
f.close()


# 练习:打开test_02文件,读取里面的内容,写入test_03.txt文件。
f = open('test_02.txt')
b = f.readlines()
f = open('test_03.txt', 'w')    # 打开模式w:清空文件的内容写入
f.writelines(b)

# 练习:打开test_02文件,读取里面的内容,并将每一行字符串反转,写入test_03.txt文件。
# 方法1:
f = open('test_02.txt')
lines = f.readlines()
l1 = []
for line in lines:
    line = line[::-1]
    l1.append(line)
print(l1)
f1 = open('test_03.txt', 'a')    # 打开模式a:在文件末尾追加写入
f1.writelines(l1)

# 方法2:简化
f = open('test_02.txt')
lines = f.readlines()
f1 = open('test_03.txt', 'a')
for line in lines:
    line = line[::-1]
    f1.writelines(line)



"""
seek():移动文件的游标位置,它接受一个参数,表示文件的位置,0:文件首部,1:当前位置,2:文件尾部,
        通过seek()可以把文件游标移动到文件首部但不删除文件的内容。
"""
f = open('test.txt', 'a+')
content = f.readlines()
print(content)      # [],游标在文件尾部,所以读取的内容为空

f.seek(0)
content = f.readlines()
print(content)

"""
打印结果:从文件开头读取内容
['Hello World.\n', 'Hello Python.\n', 'Hello Imooc.\n', 'Hello World2.\n', 'Hello Python2.\n', 'Hello Imooc2.\n', 'Hello World3.\n', 'Hello Python3.\n', 'Hello Imooc3.']
"""


# 请将文件的内容重复写一份追加到文件的尾部。
# f = open('test.txt', 'a+')
# f.seek(0)
# content = f.readlines()
# print(content)
# f.writelines('\n')
# f.writelines(content)
# f.close()


"""
关闭文件:
    在进行文件操作的时候,正确关闭一个文件非常重要,如果在文件读写后,没有正确关闭一个文件的话,则有可能导致文件损坏,文件内容丢失等问题。

close():关闭一个文件。
    但是,使用close()方法,也不是100%安全的,如果在close()文件之前,程序异常退出了,那么文件也得不到正确的关闭。

with open():
    Python提供with关键字对资源进行访问的场合,会确保不管在使用过程中是否发生异常,都会执行必要的“清理”的操作,释放资源,比如文件使用后自动关闭等等
"""
# f = open('test03.txt', 'a+')
# exit(-1) # ==> 模拟程序异常退出
# f.close() # ==> close语句永远的不到执行


# with open的使用:文件的内容重复写一份追加到文件的尾部
with open('test.txt', 'a+') as f:
    f.seek(0)
    content = f.readlines()
    print(content)
    f.writelines('\n')
    f.writelines(content)

 

posted @ 2023-03-09 00:13  雪儿来  阅读(24)  评论(0编辑  收藏  举报