Skip to main content

moregeek program

pthon教程day14-文件操作_蓦然的博客-多极客编程

文件操作

一、文件操作的作用

​思考​​:什么是文件?

Pthon教程Day14-文件操作_Python

​思考​​:文件操作包含什么?

答:打开、关闭、读、写、复制....

​思考​​:文件操作的的作用是什么?

答:读取内容、写入内容、备份内容......

总结:文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

二、文件的基本操作

2.1 文件操作步骤
  1. 打开文件
  2. 读写等操作
  3. 关闭文件

注意:可以只打开和关闭文件,不进行任何读写操作。

2.1.1 打开

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

open(name, mode)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

2.1.1.1 打开文件模式

模式

描述

r

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

rb

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

r+

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

rb+

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

w

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

wb

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

w+

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

wb+

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

a

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

ab

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

a+

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

ab+

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

2.1.1.2 快速体验

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

注意:此时的​​f​​是​​open​​函数的文件对象。

2.1.2 文件对象方法

2.1.2.1 写

  • 语法
对象对象.write('内容')
  • 体验
# 1. 打开文件
f = open('test.txt', 'w')

# 2.文件写入
f.write('hello world')

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

注意:

  1. ​w​​和a模式:如果文件不存在则创建该文件;如果文件存在,w模式先清空再写入,a模式直接末尾追加。
  2. ​r​​模式:如果文件不存在则报错。

2.1.2.2 读

  • read()
文件对象.read(num)

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

  • readlines()

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

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

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

# 关闭文件
f.close()
  • readline()

readline()一次读取一行内容。

f = open('test.txt')

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

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

# 关闭文件
f.close()

Pthon教程Day14-文件操作_备份文件_02

2.1.2.3 seek()

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

语法如下:

文件对象.seek(偏移量, 起始位置)

起始位置:

  • 0:文件开头
  • 1:当前位置
  • 2:文件结尾

2.1.3 关闭

文件对象.close()

三、文件备份

​需求​​:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)。

3.1 步骤
  1. 接收用户输入的文件名
  2. 规划备份文件名
  3. 备份文件写入数据
3.2 代码实现
  1. 接收用户输入目标文件名
old_name = input('请输入您要备份的文件名:')
  1. 规划备份文件名
    2.1 提取目标文件后缀
    2.2 组织备份的文件名,xx[备份]后缀
# 2.1 提取文件后缀点的下标
index = old_name.rfind('.')

# print(index) # 后缀中.的下标

# print(old_name[:index]) # 源文件名(无后缀)

# 2.2 组织新文件名 旧文件名 + [备份] + 后缀
new_name = old_name[:index] + '[备份]' + old_name[index:]

# 打印新文件名(带后缀)
# print(new_name)
  1. 备份文件写入数据
    3.1 打开源文件 和 备份文件
    3.2 将源文件数据写入备份文件
    3.3 关闭文件
# 3.1 打开文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

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

# 3.3 关闭文件
old_f.close()
new_f.close()
3.3 思考

如果用户输入​​.txt​​,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?

答:添加条件判断即可。

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()

四、文件和文件夹的操作

在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:

  1. 导入os模块
import os
  1. 使用os模块相关功能
os.函数名()
4.1 文件重命名
os.rename(目标文件名, 新文件名)
4.2 删除文件
os.remove(目标文件名)
4.3 创建文件夹
os.mkdir(文件夹名字)
4.4 删除文件夹
os.rmdir(文件夹名字)
4.5 获取当前目录
os.getcwd()
4.6 改变默认目录
os.chdir(目录)
4.7 获取目录列表
os.listdir(目录)

五、应用案例

​需求​​:批量修改文件名,既可添加指定字符串,又能删除指定字符串。

  • 步骤
  1. 设置添加删除字符串的的标识
  2. 获取指定目录的所有文件
  3. 将原有文件名添加/删除指定字符串,构造新名字
  4. os.rename()重命名
  • 代码
import os

# 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符
flag = 1

# 获取指定目录
dir_name = './'

# 获取指定目录的文件列表
file_list = os.listdir(dir_name)
# print(file_list)

# 遍历文件列表内的文件
for name in file_list:

# 添加指定字符
if flag == 1:
new_name = 'Python-' + name
# 删除指定字符
elif flag == 2:
num = len('Python-')
new_name = name[num:]

# 打印新文件名,测试程序正确性
print(new_name)

# 重命名
os.rename(dir_name+name, dir_name+new_name)

六. 总结

  • 文件操作步骤
  • 打开
文件对象 = open(目标文件, 访问模式)
  • 操作
文件对象.read()
文件对象.readlines()
文件对象.readline()
文件对象.write()
  • seek()
  • 关闭
文件对象.close()
  • 主访问模式
  • w:写,文件不存在则新建该文件
  • r:读,文件不存在则报错
  • a:追加
  • 文件和文件夹操作
  • 重命名:os.rename()
  • 获取当前目录:os.getcwd()
  • 获取目录列表:os.listdir()

©著作权归作者所有:来自51CTO博客作者蓦然1607的原创作品,请联系作者获取转载授权,否则将追究法律责任

【线性代数】 抽丝剥茧系列之矩阵的秩与方程解的情况_ni_cue~的博客-多极客编程

正文 1. 秩简介 矩阵的秩是线性代数中非常重要的概念,本篇主要围绕矩阵的秩和方程解的情况展开,其余内容不做阐述。 对于方程Ax = b: $$\begin{cases}x_1 + x_2 +x_3= 12 \x_1 - 3x_2 +x_3=8\x_1 -x_2 +x_3= 10\end{cases}$$ 其对应的增广矩阵为: $$\overline{A} = \begin{bmatrix}1

[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言_overmind1980的博客-多极客编程

程序本质回忆上次内容我们把python源文件词法分析 得到 词流(token stream)语法分析 得到 抽象语法树(Abstract Syntax Tree)编译 得到 字节码 (bytecode)字节码我们看不懂所以反编译 得到 指令文件(opcode)指令文件是基于python虚拟机的虚拟cpu的指令集什么是python虚拟机呢?🤔在了解虚拟cpu之前我们先看看真实的cpu真实的cpu无论

【python基础学习】第十六节 数据库(mysql 操作全收录)_这么神奇的博客-多极客编程

Python基础学习之数据库(Mysql 操作全收录) 1. 数据库操作 1.1 显示数据库 SHOW DATABASES; 1.2 创建数据库 # 使用 utf-8 字符集 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # 使用 gbk 字符集 CREATE DATABASE 数据库名称 DEFAUL

python 简易版贪食蛇(源代码)_这么神奇的博客-多极客编程

Python 简易版贪食蛇 简易版贪食蛇代码如下,直接运行即可。 1. 效果图 2.源代码 源代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import pygame as pygame import random import sys from pygame.rect import Rect class Snake(object

python基础核心概念(1)_domi+1的博客-多极客编程

1 变量和简单数据类型变量命名格式:变量名 = “赋值”1.1 变量使用规范使用变量时,需要遵守一些规则。违反这些规则将引发错误。~变量名只能包含数字、字母、下划线。变量名不能以数字开头以及不能包含空格。~变量名不能将Python保留字和函数名作为变量名。如print等如下是python3的33个保留字列表:~变量名要简单又具有描述性。如name比n好,user_name比u_n好。~慎用大写字母

python 实现栈的几种方式及其优劣_宇宙之一粟的漂泊之旅的博客-多极客编程

1 栈的概念栈由一系列对象对象组织的一个集合,这些对象的增加和删除操作都遵循一个“后进先出”(Last In First Out,LIFO)的原则。在任何时刻只能向栈中插入一个对象,但只能取得或者删除只能在栈顶进行。比如由书构成的栈,唯一露出封面的书就是顶部的那本,为了拿到其他的书,只能移除压在上面的书,如图:栈的实际应用实际上很多应用程序都会用到栈,比如:网络浏览器将最近浏览的网址存放在一个栈中

【java】来回顾下jwt知识点,了解一下什么是jwt?_小冷的博客-多极客编程

(回顾下JWT知识点) 1. 什么是JWT 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程: 1.客户端使用用户名和密码请求登录。 2.服务端收到请求,验证用户名和密码。 3.验证成功后,服务端会签发一个token,再把这个token返回给客户端。 4.客户端收到token后可以把它存储起来,比如放到cookie中。 5.客户端每次向服务端请求资源时需要携带服务端签发的t

浅析摩尔投票算法_158shi的博客-多极客编程

·引入:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}由于数字2在数组中出现了五次,超过数组长度的一半,因此输出2如果不存在则输出NO分析一:计数器一个数字出现的次数超过数组长度的一半,看到这些字眼最先想到的就是计算出数组中的每个数出现的次数times,如果times大于数组的长度的一半,则这个数就是所

java多线程(5):cas_湘王的博客-多极客编程

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~​在JDK1.5之前,Java的多线程都是靠synchronized来保证同步的,这会引起很多性能问题,例如死锁。但随着Java的不断完善,JNI(Java Native Interface)使得Java能越过JVM直接调用本地方法,例如CAS。CAS是Compare And Swap(比较与交换)的缩写,它用于实现多线程同步的原子指令

springboot中使用切面aop实现日志信息记录到数据库_记笔记/程序bug的博客-多极客编程

1、导入相关的依赖 <!--spring切面aop依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifac

常用字符串函数的应用_failboat的博客-多极客编程

常用字符串函数包括:gets( )   puts( )   strlen( )   strcat( )    strcmp( )    strcpy( ) ​程序代码#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>int main(){      char c1[10], c2[20

spring boot中集成lucence_梁云亮的博客-多极客编程

Lucence 和全文检索 Lucene概念 Lucene是一套用于全文检索和搜寻的开源程式库,由 Apache 软件基金会支持和提供。Lucene 提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在 Java 开发环境里 Lucene 是一个成熟的免费开源工具。就其本身而言,Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库。——《百度百科》 全文检索 这里提