Python基础学习-文件处理

文件操作(IO操作)

一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实际的存储,因此 python 解释器执行完数据就消失了。实际开发中,我们经常需要从外部存储介质(硬盘、光盘、U 盘等)读取数据,或者将程序产生的数据存储到文件中,实现“持久化”保存。

文本文件和二进制文件

按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类:

  • 文本文件
    • 文本文件存储的是普通“字符”文本,python 默认为 unicode 字符(两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件编辑的文档不是文本文件。
  • 二进制文件
    • 二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

文件操作相关模块概述

在这里插入图片描述

创建文件对象 open()

open()函数用于创建文件对象,基本语法格式如下:

open(文件名[,打开方式])

如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。
为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:
f = open(r"d:\b.txt",“w”)

在这里插入图片描述

文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文本文件的写入

基本的文件写入操作

文本文件的写入一般就是三个步骤:

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象
#文本写入操作简单测试
f=open(r"d:\a.txt","a")
s="leimu\n yxy\n"
f.write(s)
f.close()

os 和 os.path 模块

os 模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。

os 模块-调用操作系统命令

  • os.system 可以帮助我们直接调用系统的命令
  • os.startfile:直接调用可执行文件
import os
#os.system("notepad.exe") #打开记事本
#os.system("regedit") #打开注册表
#os.system("ping www.baidu.com")
#os.system("cmd")

#测试直接运行程序
os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

os 模块-文件和目录操作

我们可以通过前面讲的文件对象实现对于文件内容的读写操作。如果,还需要对文件和目录做其他操作,可以使用 os 和 os.path 模块。

os 模块下常用操作文件的方法
在这里插入图片描述
os 模块下关于目录操作的相关方法,汇总如下:
在这里插入图片描述

import os
#测试os模块中,关于文件和目录得操作
#############获取文件和文件夹相关的信息################
print(os.name)  #windows->nt    linux和unix->posix
print(os.sep)   #windows->\     linux和unix->/
print(os.linesep)
print(os.stat("test-2.py"))

################关于工作目录的操作##################
#print(os.getcwd())
#os.chdir("d:")  #改变当前的工作目录为:d:盘根目录
#os.mkdir("书籍")
#os.rmdir("书籍") #相对路径都是相对于当前的工作目录

#os.makedirs("电影/港台/周星驰")
#os.removedirs("电影/港台/周星驰")  #只能删除空目录

#os.makedirs("../音乐/香港/刘德华")    #../指的是上一级目录

##################创建目录、创建多级目录、删除##################
#os.rename("电影","moive")
dirs=os.listdir("moive")
print(dirs)

os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作
在这里插入图片描述
在这里插入图片描述

import os
import os.path
path=os.getcwd() #返回当前工作目录
file_list=os.listdir(path)  #列出子目录和子文件
for filename in file_list:
    pos = filename.rfind(".")   #Python rfind() 返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1。
    if filename[pos+1:]=="py":
        print(filename,end="\n")

print("############################")
file_list2=[filename for filename in os.listdir(path) if filename.endswith(".py")]
for filename in file_list2:
    print(filename,end="\n")

walk()递归遍历所有文件和目录

os.walk()方法:
返回一个3个元素的元组,(dirpath,dirnames,filenames)

  • dirpath:要列出指定目录的路径
  • dirnames:目录下的所有文件夹
  • filenames:目录下的所有文件
#测试os.walk()递归遍历所有的子目录和子文件
import os
all_files=[]
path=os.getcwd()
list_files=os.walk(path)

for dirpath,dirnames,filenames in list_files:
    for dir in dirnames:
        #print(os.path.join(dirpath,dir))
        all_files.append(os.path.join(dirpath,dir))
    for file in filenames:
        #print(os.path.join(dirpath,file))
        all_files.append(os.path.join(dirpath,file))

for file in all_files:
    print(file)

shutil 模块(拷贝和压缩)

  • shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。
  • os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些 os 模块都没有提供。
#shutil 模块(拷贝和压缩)
import shutil
#shutil.copyfile("b.txt","c.txt")
#shutil.copytree("66/77","电影")   #电影目录不存在时才能政策拷贝
shutil.copytree("66/77","电影",ignore=shutil.ignore_patterns("*.txt","*.html"))
import zipfile
#压缩解压
#压缩
z = zipfile.ZipFile("a.zip","w")
z.write("1.txt")
z.write("2.txt")
z.close()
#解压缩
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()

递归算法

  • 递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
  • 利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。
  • 递归结构包括两个部分:
    • 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
    • 递归体。解答:什么时候需要调用自身方法。

使用递归求 n!

#递归函数计算n的阶乘(5x4x3x2x1)
def factorial(n):
    if n==1:
        return n
    else:
        return n*factorial(n-1)
print(factorial(5))

递归打印所有的目录和文件

#递归打印所有的目录和文件
import os
allFiles=[]
def getAllFiles(path,level):
    childFiles=os.listdir(path)
    for file in childFiles:
        filepath=os.path.join(path,file)
        if os.path.isdir(filepath):
            getAllFiles(filepath,level+1)
        allFiles.append("\t"*level+filepath)
getAllFiles(os.getcwd(),0)

for f in reversed(allFiles):	#reversed()函数的作用是返回一个反转的迭代器
    print(f)
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\电影
	C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\电影\__init__.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\__init__.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-6.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-5.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-4.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-3.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-2.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\test-1.py
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\c.txt
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\b.txt
C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\66
	C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\66\__init__.py
	C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\66\y.txt
	C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\66\77
		C:\Users\ramon\.PyCharmCE2017.2\config\scratches\-\66\77\__init__.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值