首页 > 编程语言 >python文件操作

python文件操作

时间:2023-09-15 19:46:12浏览次数:33  
标签:文件 读取 python content 文件夹 操作 os

python:文件处理

一、文件的基本概念

1、什么是文件

内存中存放的数据在计算机关机后就会消失(临时存储)。要长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理与检索。引入了“文件”的概念。

一篇文章,一段视频,一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别

2、文件操作包括哪些内容呢

在日常生活中,文件操作主要包括打开、关闭、读、写、备份等操作。

3、文件操作的作用

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

  • 简单来说就是显示数据持久化保存。

二、文件操作三步走

① 打开文件 ② 读写文件 ③ 关闭文件

1、open()函数打开文件

open(name, mode)
name : 代表要打开的文件路径 + 名称
mode :代表访问模式,目前记住三种 => r/w/a
r : read,只读模式,代表只能对文件进行读取,属于默认模式,如果要访问的文件不存在,则直接报错。
w : write,只写模式,代表只能对文件进行写入操作,如果访问的文件不存在,则系统会自动报错,但是写入文件时,它首先对文件内容进行清空,然后再写入新的内容。
a :append,追加模式(只写模式的一种),与w类型,如果访问的文件不存在,也可以自动创建该文件。但是在写入数据到文件的时候,并不会清空文件原有的内容。

② 写内容到文件中 => f.write(content) =>f.write()只能把字符串类型的数据写入文件中

③ 关闭文件(因为文件打开后需要占用计算机资源)

注意:open()方法操作之后,返回的是一个文件对象(文件句柄)以后的读写都需要依赖这个对象(句柄)
  • w:清空原有文件内容 a : 追加新的内容
# 打开文件
f = open('python.text', 'w')   # 同级文件,在同一路径下

# 写入内容

f.write('Life is short , I study python!')

# 关闭文件
f.close()

三、解决中文乱码问题

乱码的原因:大多编程语言都是老外开发的,对中文的支持不太好,最早美国搞出了一套编码格式 :ASCII =>一个字节 =>8bit 主要能表达255个字符(主要包括了0-9,a-z,A-Z,老外字符)

随着编程语言和互联网的发展,编程语言传入了国内,发现255个字符根本装不了中文,所以就会产生所谓的乱码。

中国推出了自己的编码格式:GB2312(255个字符+汉字支持)=>更新=>GBK

国际组织:编码标准unicode => UTF - 8

  • 在打开文件时,添加参数encoding = 'utf - 8'
# 打开文件
f = open('python.text', 'w', encoding = 'utf - 8')   # 同级文件,在同一路径下

# 写入内容

f.write('人生苦短,我学python!')

# 关闭文件
f.close()

四、文件读取三步走

① 打开文件 ② 读取文件 ③ 关闭文件

读取文件的三种方法:
1、read(): 读取文件的所有内容,可以添加一个参数size,代表读取字符的长度
2、readlines():一次读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
3、readline():一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,通常配合while True使用

1、read()

f = open('python.text', 'r', encoding='utf -8')
# content = f.read()  # 代表读取文件的所有内容
content = f.read(1)  # size = 1 代表读取文件的一个字符
print(content)

f.close()

2、readlines

f = open('python.text', 'r', encoding='utf -8')
content = f.readlines()
print(content)
f.close()
  • 只适合读取小文件,因为readlines一次读取文件,大文件容易卡死

3、readline

f = open('python.text', 'r', encoding='utf - 8')

while True:
    content = f.readline()
    print(content, end='')
    if not content:  # 如果content内容为空则为True,退出循环 content = '' 则not '' = True
        break

五、文件访问模式(mode参数)

r : 只读
w :只写
a :追加
以上r、w、a只针对文本文件(.txt)

+ 代表既可以读取又可以写入

b : binary缩写形式,以二进制流的方式读取文件或写入数据到文件中

rb
wb
ab
以上rb、wb、ab不仅可以针对文本文件,还可以针对图片文件、音频文件、视频文件进行读写操作
又由于二进制底层是通过0101读取的,所以不能设置编码格式,否则会报错!

案例之文件备份:

  • 介绍个字符串查找的方法:rfind()
rfind():从左向右查找,返回这个关键字在最后一次出现的位置
"""
需求:用户输入当前目录下的任何文件名,完成对该文件的备份功能,(备份文件命名为XX[备份]后缀,例如:(test[备份].txt)
分析:
1、提示用户输入并接收
2、文件名称的变化
3、内容完全拷贝过来
"""
filename = input('请您输入当前目录下要备份的文件名称:')
file1 = open(filename, 'rb')  # rb模式不仅仅限制为文本文件
num1 = filename.find('.')
rename = filename[:num1] + '[备份]' + filename[num1:]
file2 = open(rename, 'wb')  # 二进制不能不能使用编码模式

while True:
    content = file1.readline()
    if not content:
        break
    file2.write(content)
'''
# 与上述的效果一致 设置为每次只读取1kb,防止程序卡死
while True:
    content1 = file1.read(1024)  # 当mode为r模式时候,size为字符,当为rb模式时,size代表字节大小 1024= 1kb
    if not content:
        break
    file2.write(content1)
'''
file1.close()
file2.close()

六、文件与文件夹的操作

在python中文件与文件夹的操作要借助os模块里面的相关功能

文件操作之os模块相关函数:

编号 函数 功能
1 os.rename(目标文件名称,新文件名称) 对文件进行重新命名操作
2 os.remove(要删除文件的名称) 对文件进行删除操作
3 os.path.exists(目标文件名称) 判断文件是否存在
import os

if os.path.exists('python1.txt'):
    os.rename('python1.txt', 'python2.txt')
os.remove('python2.txt')

文件夹操作之os模块相关函数:

编号 函数 功能
1 os.mkdir(新文件夹名称) 创建一个指定名称的文件夹
2 os.getcwd() current work directory ,获取当前目录的绝对路径
3 os.chdir() change directory ,切换目录
4 os.listdir() 获取指定目录下的文件信息,返回列表
5 os.rmdir() 用于删除指定名称的 ’‘空’‘ 文件夹
  • 这是针对目录(文件夹)的操作
"""
准备一个static文件夹以及file1.txt、file2.txt、file3.txt三个文件
1、在程序中,将当前目录切换到static文件夹
2、创建一个新images文件夹以及test文件夹
3、获取目录下的文件
4、移除test文件夹
"""

import os

# 获取当前目录的文件位置
print(os.getcwd())

# 切换当前工作目录为static文件夹
os.chdir('static')
os.chdir('E:\pythonProject1\day11\static')  # 效果与上等同,都是在E:\pythonProject1\day11下执行
print(os.getcwd())

# 在当前工作目录下创建images与test文件夹
if not os.path.exists('images'):  # 当前工作目录下,如果文件夹images不存在,则创建一个images文件夹
    os.mkdir('images')
if not os.path.exists('test'):
    os.mkdir('test')

# 创建指定工作路径的文件夹images1
if not os.path.exists('E:\pythonProject1\day11\images1'):
    os.mkdir('E:\pythonProject1\day11\images1')

# 获取指定目录下的文件信息
print(os.listdir('E:\pythonProject1\day11\static'))

# 移除test文件
os.chdir('images') # 切换到images目录下,images目录下没有test文件夹,无法执行删除test文件
os.chdir('E:\pythonProject1\day11\static') #需要切换到当前工作目录下
os.rmdir('E:\pythonProject1\day11\images1') #要么添加位置路径
if os.path.exists('test'):
    os.rmdir('test')

需要注意事项:

返回上一级目录:   os.chdir('..')  

image-20230915191004162

​ 在static目录下,并不能直接切换到text1目录下

  • 在同级目录的情况下,不能直接切换目录,需要先返回上一级目录,也可以使用绝对路径切换目录
os.chdir('E:\pythonProject1\day11\static')

非空文件夹的删除(递归删除,慎重使用)

# 导入shutil模块
import shutil
# 递归删除文件夹
shutil.rmtree('要删除文件夹路径')

递归删除文件夹的原理:理论上,其在删除过程中,如果文件夹非空,则自动切换到文件夹的内部,然后把文件夹内部的文件一个一个删除,当所有文件删除完毕之后,返回到上一级目录,删除文件夹本身。

七、与文件相关的路径问题

绝对路径:

绝对路径:从盘符(C盘、D盘、E盘)一级一级向下访问,直到访问到需要的文件 => 绝对路径
如:E:\pythonProject1\day11 => E:/pythonProject1/day11  使用斜杆/代替反斜杠\ 
因为在字符串中,\反斜杠代表转义字符 

缺点:不方便后期代码的迁移,把代码上传到linux服务器上面

相对路径:

相对路径:就是有着一个参考点,这个参考点就是代码文件本身
在该项目中,其他文件一般与代码文件本身有三个关系:
1、同级关系(平行关系):同级的访问直接使用 ./文件名称 或 文件名称
2、上级关系:(比如在上述中,我们把代码切换到static目录下,在static目录中,与外部的python.txt就是上级关系,可以使用 ../文件名称 来访问上级文件 ../../就是上级的上级
3、下级关系:就是我们要访问的文件,在同级目录的下面,这种就称为下级关系 => 同级文件夹名称/文件名称
# 同级访问
f = open('python.txt', 'r')
f.close()

# 上级访问
os.chdir('static')  # 先切换到static文件夹目录下
file1 = open('../python.txt')
file1.close()

# 下级访问
print(os.getcwd())
file2 = open('../python.txt')
file2.close()

标签:文件,读取,python,content,文件夹,操作,os
From: https://www.cnblogs.com/luoluoange/p/17705783.html

相关文章

  • losf定位文件被那个程序打开和对误删除的文件进行恢复方法
    lsof查看文件被那个进程打开#lsof列出当前所有打开的文件[root@centos8~]#lsof|headCOMMANDPIDTIDTASKCMDUSERFDTYPEDEVICESIZE/OFFNODENAMEsystemd1rootcwdDIR8,2279......
  • 【从零学习python 】07.Python运算符详解:赋值、比较和逻辑运算符
    赋值运算符基本赋值运算符运算符描述实例=赋值运算符把=号右边的结果赋给左边的变量,如num=1+2*3,结果num的值为7单个变量赋值:num=10num同时为多个变量赋值(使用等号连接):a=b=4ab多个变量赋值(使用逗号分隔):num1,f1,str1=100,3.14......
  • 彻底弄懂 Linux 下的文件描述符(fd)
    https://blog.csdn.net/yushuaigee/article/details/107883964 目录1、从一个最常见的例子说起2、Linux中的文件描述符(filedescriptor)3、Linux上打开文件举例4、C语言中文件描述符的使用5、Python中文件描述符的使用6、Linux配置系统最大打开文件描述符个数7、参考链接......
  • springboot+vue导出本地可执行文件
    1、前端页面增加下载链接<ahref="http://localhost:80/system/download"download="xxx.exe">下载地址</a>2、后端读取文件下载//下载文件@GetMapping("/system/download")publicvoiddownload(HttpServletResponseresponse){S......
  • FTP文件共享服务
    实际工作中,经常会需要共享本地文件夹。本篇介绍HHDESK的FTP共享服务,仅需一个步骤即可创建共享连接。1新建连接首页——资源管理——服务端——“+”,在弹出框中选择FTP代理服务。填写各个选项,选择需要共享的文件夹。点击确定。地址如下,格式为“ftp://IP:端口号/”2使用......
  • linux DVWA 文件上传之 Security level set to high
    --总体步骤1、生成图片木马2、上传图片木马3、通过文件包含执行图片马一、生成图片木马1、随便准备一张图片——football.png2、test.php写入内容:<?php@eval($_GET['x']);?>3、生成图片木马,命令行执行:catfootball.pngtest.php>>my.png二、把DVWA的安全级别......
  • 拖拽表单设计器易操作、好灵活,创造高效办公!
    什么样的表单设计器深受欢迎?随着业务量的增加,急需要采用更专业、更灵活的办公方式来提升办公效率了。低代码技术平台服务商流辰信息一直深入了解市场信息,研发低代码技术产品,为大众推荐拖拽表单设计器实现高效办公。今天,一起来了解低代码技术平台及拖拽表单设计器的相关内容吧。在......
  • Ajax 跨域报错 python后端处理
    Ajax跨域报错python后端处理个人项目,前端接口用Ajax写的,python后端部署在另一台电脑上,发出以下报错:查询很久发现是因为前端向后端发送请求时,会预先发送一个OPTION的请求,然后请求通过之后才能够发送这个POST的请求。具体原因还是没有理解,只知道这个大概,有理解的可以评论区......
  • python的字典错误:RuntimeError: dictionary changed size during iteration
    1.在字典遍历过程中修改字典元素,报错RuntimeError:dictionarychangedsizeduringiteration错误代码:foriinphone:i=int(i)forkeyindict_phone.keys():ifkey==i:print(dict_phone.pop(key,'ss')) 改正foriinphone:i......
  • Python并发编程——IO模型、阻塞IO、非阻塞IO、多路复用、异步IO、IO模型比较、select
    文章目录每日测验一IO模型介绍二阻塞IO(blockingIO)三非阻塞IO(non-blockingIO)四多路复用IO(IOmultiplexing)五异步IO(AsynchronousI/O)六IO模型比较分析七selectors模块网络并发知识点梳理网络并发知识点梳理每日测验简述死锁现象你用过哪些队列阐述进......