当前位置: 首页 > news >正文

Python基础内容训练9(文件操作)

文件操作

文件概念
在这里插入图片描述
文件的操作

这个定位是指定位到文件的那一部分

在这里插入图片描述

  • 打开操作的r模式----只读,只能文件进行读操作
    在这里插入图片描述
#1. 打开文件
f = open('a.txt','r') #相当于给文件开了一条管道,或者说接受返回的文件对象
#2. 进行操作
content = f.read()
print(content)
#3. 关闭文件
f.close()

在这里插入图片描述

  • 打开操作的w模式----只写,只能对文件进行写操作

在这里插入图片描述

# 1. 打开文件
f = open('a.txt','w') #相当于给文件开了一条管道,或者说接受返回的文件对象
# 2. 进行操作
f.write('nihao')

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

在这里插入图片描述

  • 打开操作的a模式----以追加的方式对文件进行只写操作,并且是在文件末尾进行只写操作

在这里插入图片描述
在这里插入图片描述

# 1. 打开文件
f = open('a.txt','a') #相当于给文件开了一条管道,或者说接受返回的文件对象
# 2. 进行操作
f.write('123')

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

在这里插入图片描述

  • 前面的r,w,a可以和b组合

在这里插入图片描述

案例:对图片进行操作

# 1. 打开一张图片,取出内容,获取内容的前半部分
# 1.1 打开文件
f = open('1.png','rb')
# 1.2 读取文件内容
content = f.read()
print(content)
# 1.3 关闭文件
f.close()
# 2. 打开另一个图片,再把取出的前半部分,写入第二个图片中
# 2.1 打开目标文件
f1 = open('2.png','wb')
# 2.2 写入操作
content1 = content[0:len(content) //2]
f1.write(content1)
# 2.3 关闭文件
f1.close()

在这里插入图片描述
从图片结果看,第二张图片是第一张图片的一部分
在这里插入图片描述
在这里插入图片描述

  • 前面的r,w,a可以和b+组合

在这里插入图片描述
r+是既可以读,又可以写的;如果在r+模式先写了两个操作,既有读又有写的操作,读在写前面的话,先读,指针到了最后,写的时候会把内容写在最后面。

文件的定位

  • f.seek(offset,whence) 两个参数一个是开端,另外一个是依据那个参照点的变量
  • f.tell是告诉当前指针位置在哪里

在这里插入图片描述

在这里插入图片描述

f = open('1.txt','r')

print(f.tell())
f.seek(2)
print(f.tell())
print(f.read())
print(f.tell())
f.close()

在这里插入图片描述

文件的读操作

在这里插入图片描述

  • f.readline()是读取一行元素
f = open('1.txt','r')

result = f.readline()
print(result)
result1 = f.readline()
print(result1)

f.close()

在这里插入图片描述
这里我们看到每一次输出后下面都有一个空行,这是print函数导致的,我们在print函数后面用end的空字符结尾,不让他换行就可以解决

f = open('1.txt','r')

result = f.readline()
print(result,end='')
result1 = f.readline()
print(result1,end='')

f.close()

在这里插入图片描述

  • f.readlines可以自动的将文件按照换行符进行处理,将处理好的每一行组成一个列表返回
f = open('1.txt','r')
content = f.readlines()
print(content)
f.close()

在这里插入图片描述
文件的遍历操作

在这里插入图片描述

import collections
f = open('1.txt','r')
print(isinstance(f,collections.Iterator)) #判断是不是可迭代的
for i in f:
    print(i,end='')
f.close()

f = open('1.txt','r')
content = f.readlines()
for i in content:
    print(i,end='')
f.close()

在这里插入图片描述

  • 判断文件是否可读
f = open('1.txt','w')
if f.readable():
    content = f.readlines()
    for i in content:
        print(i,end='')
f.close()

在这里插入图片描述

  • 读取文件的注意事项:

在这里插入图片描述

文件的写入操作

在这里插入图片描述

f = open('1.txt','a')
if f.writable():
    print(f.write('abc'))
f.close()

在这里插入图片描述

文件的关闭操作

在这里插入图片描述

文件的相关操作

要先导入os模块

  • 重命名操作

os.rename(’原来的文件名’,‘现在的文件名’)
os.renames(和上面一样,只不过如果现在的文件不存在会自动创建)一层一层需修改,多级的进行修改
在这里插入图片描述

  • 删除操作

在这里插入图片描述

  • 创建文件夹

在这里插入图片描述
在这里插入图片描述

  • 查看改变列表目录

在这里插入图片描述

  • 文件的案例:要求把一个文件复制到另外一个文件中

为什么开头要加os模块呢,因为你当前位置不在文件夹呢,想要操作文件夹内的文件就要切换到当前模块下来进行复制操作

import os
os.chdir('file')
#文件的案例,实现文件的复制
# 1. 打开源文件和新文件,源文件可以是只读,新文件可以是追加
source_file = open('1.txt','r')
dis_file = open('1_bat.txt','a')

# 2. 从源文件中读取内容,放入目标文件中
content = source_file.read()
dis_file.write(content)

source_file.close()
dis_file.close()

在这里插入图片描述
在这里插入图片描述
当进行大文件复制的时候,可以一行一行进行复制,下面对一行一行进行复制的时候,要加个循环和判断,对于要复制的内容为0的时候就结束循环

在这里插入图片描述

  • 案例2:文件的分类,根据不同的后缀名对文件进行不同的分类

在这里插入图片描述

# 1. 获取所有的文件名称列表
import os

import shutil
os.chdir('file') #切换到file目录下
file_list = os.listdir('./')
# print(file_list) #列表的形式
# 2. 遍历所有的文件名称
for file_name in file_list:
    # print(file_name)
# 3. 分解文件的后缀名(尤其是最后一个.,比如这种的aa.xx.txt)
    index = file_name.rfind('.')
# 根据这个索引,从当前位置开始取后面的后缀名
    extension = file_name[index+1:] #切片处理取后缀
    print(extension)
# 查看一下,是否存在同名的目录
# 如果不存在,直接创建一个目录
    if not os.path.exists(extension):
        os.mkdir(extension)
    shutil.move(file_name,extension)

在这里插入图片描述
在这里插入图片描述

相关文章:

  • 冰冰学习笔记:list的简单模拟
  • 基于鸽群优化算法的线性规划求解matlab程序
  • 【博客505】k8s Sig-scheduler Coscheduling调度器插件原理
  • 【Linux】I/O多路复用-SELECT/POLL/EPOLL
  • Python解释器路径寻找规则
  • [Qt桌面开发]一个Qt简单界面的开发
  • 文本的换行与包裹 之可能是全网最详细的 line-break 中文介绍
  • Matlab项目合作
  • 【Eigen】Chapter4 几何模块 Geometry
  • 【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)
  • Linux中断概述
  • 【统计学习|书籍阅读】第一章 统计学习方法概论 p1-p24
  • 操作系统——计算机系统概述补充
  • pytorch 实现一个最简单的 GAN:用mnist数据集生成新图像
  • 七雄争霸武将技能搭配
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • C++类的相互关联
  • gops —— Go 程序诊断分析工具
  • HTTP请求重发
  • IndexedDB
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • mysql中InnoDB引擎中页的概念
  • Redash本地开发环境搭建
  • vue-cli在webpack的配置文件探究
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 程序员最讨厌的9句话,你可有补充?
  • 动态魔术使用DBMS_SQL
  • 数据科学 第 3 章 11 字符串处理
  • Java性能优化之JVM GC(垃圾回收机制)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (52)只出现一次的数字III
  • (9)目标检测_SSD的原理
  • (Java数据结构)ArrayList
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十三)Flask之特殊装饰器详解
  • (十五)使用Nexus创建Maven私服
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)WLAN定义和基本架构转
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)scrum常见工具列表
  • .apk 成为历史!
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net framework4与其client profile版本的区别
  • .net 反编译_.net反编译的相关问题
  • .net 中viewstate的原理和使用
  • @property @synthesize @dynamic 及相关属性作用探究
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法