6.Python快速入门文件读写操作

0 阅读3分钟

1.open()打开函数open(name, mode, encoding)

# name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
# mode:设置打开文件的模式(访问模式):只读、写入、追加等。
# encoding:编码格式(推荐使用UTF-8)

f = open('python.txt', 'r', encoding=”UTF-8)
# encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定

mode常用的三种基础访问模式 image.png

2.读操作相关方法

1).read()方法:文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

2).readlines()方法:

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f = open('python.txt')
content = f.readlines()

# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)

# 关闭文件
f.close()

3).readline()方法:一次读取一行内容

f = open('python.txt')

content = f.readline()
print(f'第一行:{content}')

content = f.readline()
print(f'第二行:{content}')

# 关闭文件
f.close()

for循环读取文件行

for line in open("python.txt", "r"):
    print(line)

# 每一个line临时变量,就记录了文件的一行数据

4).close() 关闭文件对象

f = open("python.txt", "r")

f.close()

# 最后通过close,关闭文件对象,也就是关闭对文件的占用
# 如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用。

5).with open 语法

with open("python.txt", "r") as f:
    f.readlines()

# 通过在with open的语句块中对文件进行操作
# 可以在操作完成后自动关闭close文件,避免遗忘掉close方法

image.png

注意如果使用一个文件对象执行多次read相关操作,每次执行是在上一次执行的游标处开始读取

例如你执行了read()方法读取全部再执行readline()返回的结果为空


# 写入文件内容
# w mode文件不存在会创建文件  文件已存在会清空文件内数据再写入
# f=open("C:/Users/Administrator/Desktop/test.txt","w",encoding="utf-8")
# f.write("Hellow")
# f.write("Hellow File") # 将字符串写入缓冲区
# f.flush() #将字符串从缓冲区写入硬盘
# f.close()

# 追加写入操作
# a模式不会创建文件, 会在文件内容末尾追加
f=open("C:/Users/Administrator/Desktop/test.txt","a",encoding="utf-8")
f.write("\n123") # 将字符串写入缓冲区
f.flush() #将字符串从缓冲区写入硬盘
f.close()

将bill.txt文件内内容按末尾不是测试结束的每一行数据备份至bill.txt.bak

"""
演示文件操作综合案例:文件备份
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
"""

# 打开文件得到文件对象,准备读取
fr = open("D:/bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("D:/bill.txt.bak", "w", encoding="UTF-8")
# for循环读取文件
for line in fr:
    line = line.strip()
    # 判断内容,将满足的内容写出
    if line.split(",")[4] == "测试":
        continue        # continue进入下一次循环,这一次后面的内容就跳过了
    # 将内容写出去
    fw.write(line)
    # 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")

# close2个文件对象
fr.close()
fw.close()      # 写出文件调用close()会自动flush()