【Python】文件操作(单文件操作)

目录

一、文件操作概述:

二、文件基本操作:

文件操作步骤:

1.打开文件:

2.对文件进行读写操作:

3.关闭文件的输入输出流:

demo:

文件访问模式:

基础访问模式特点:

读取操作:

1.read()

2.readline()

3.readlines()

文件对象方法:

seek()

三、文件备份:

实现步骤:

代码实现:

1.接收用户输入的目标文件名:

2.规划备份文件名:

3.备份文件写入数据:

4.代码优化:


一、文件操作概述:

        文件操作:就是将数据从内存中进行持久化,读取本地磁盘或者远程服务器数据加载到内存中,可以使得程序在下一次执行时,可以直接使用上一次执行结束时的数据,而不必重新获取数据!


二、文件基本操作:

文件操作步骤:

1.打开文件:

使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

open(name,mode)
  • name:指定打开的目标文件名称的字符串(可以包含文件所在的具体路径)
  • mode:设置打开文件的模式(只读,写入,追加等)

2.对文件进行读写操作:

# 指定文件对象,通过文件对象,对文件进行读写操作
f.write("hello krian !")

3.关闭文件的输入输出流:

# 关闭文件流
f.close()

demo:

f = open('test.text','w')

#--------------------------------------------------

# 1.打开一个文件(新创建一个文件) open()
f = open('test.text', 'w') # f:作为open函数的文件对象

# 2.指定文件对象,对文件进行读写操作
f.write("hello krian !")

# 3.关闭文件流
f.close()

注意:此时fopen函数的文件对象!

文件访问模式:

模式

描述

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

基础访问模式特点:

  • 访问模式对文件的影响
  • 访问模式对write()的影响
  • 访问模式是否省略

r访问模式:

  • 如果文件对象不存在,则会报错
  • 不支持写入操作,表示只读

w访问模式:

  • 如果文件对象不存在,不会报错,程序自动创建对应的文件对象
  • 执行写入操作,如果文件对象已经存在,默认覆盖该文件对象

a访问模式:

  • 如果文件对象不存在,不会报错,程序自动创建对应的文件对象
  • 执行追加操作,如果文件对象已经存在,默认在文件末尾追加写入的内容

访问模式的参数是否可以省略:

  • 针对已经存在的文件对象进行操作时,访问模式可以省略,默认时r访问模式
  • 针对不存在的文件对象进行操作时,访问模式不可省略

读取操作:

1.read()

文件对象.read(num)

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

注意:每一行结尾处的"\n"的换行符对字节数的占用!!!

2.readline()

readline()一次性读取一行内容:

f = open('test.txt')

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

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

# 关闭文件
f.close()

3.readlines()

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

test.text文件内容:

hello krian !
hello world !
hello lunaticer!
hello 明天!
# 1.打开一个文件(新创建一个文件) open()
f = open('test.text', 'r')  # f:作为open函数的文件对象

# 2.指定文件对象,对文件进行读取操作
test_text = f.readlines()
print(test_text)  # ['hello krian !\n', 'hello world !\n', 'hello lunaticer!\n', 'hello 明天!']

# 3.关闭文件流
f.close()

文件对象方法:

seek()

作用:用来移动文件指针。

文件对象.seek(偏移量,起始位置)
  • 0:文件开头
  • 1:当前位置
  • 2:文件结尾

三、文件备份:

  1. 需求分析
  2. 根据需求分析步骤
  1. 根据实际场景体调优

实现步骤:

  1. 接收用户输入的文件名
  2. 规划备份文件名
  1. 备份文件写入数据(数据与原文件一致)

代码实现:

1.接收用户输入的目标文件名:

old_name = input('请输入您要备份的文件名:')

2.规划备份文件名:

  • rfind()函数:从字符串右侧开始查找,返回下标索引值
  • lfind()函数:从字符串左侧开始查找,返回下标索引值
# 提取文件后缀点的下标
index = old_name.rfind('.')
  • 字符串变量名[起始索引:终止索引]:字符串切片,返回子串
old_name[:index]
# 组织新文件名 旧文件名 + [备份] + 后缀
new_name = old_name[:index] + '[备份]' + old_name[index:]

# 打印新文件名(带后缀)
# print(new_name)

3.备份文件写入数据:

# 打开文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

# 将源文件数据写入备份文件
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)

# 关闭文件
old_f.close()
new_f.close()

4.代码优化:

添加判断条件,限制后缀:

old_name = input('请输入您要备份的文件名:')

index = old_name.rfind('.')


if index > 0:
    postfix = old_name[index:]

new_name = old_name[:index] + '[备份]' + postfix

old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)

old_f.close()
new_f.close()

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃糖的范同学

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值