Python基础学习Day10(下)(csv文件操作、os和os.path模块、shutil模块压缩解压缩、递归)

CSV文件操作

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与Excel文件不同,CSV文件中:
值没有类型,所有值都是字符串
不能指定字体颜色等样式
不能指定单元格的宽高,不能合并单元格
没有多个工作表
不能嵌入图像图表

读csv文件

csv.reader()

import csv
with open(r"C:\Users\T\Desktop\salary.csv","r") as f:
    a_csv=csv.reader(f)
    print(list(a_csv)) #以列表形式打印
    for row in a_csv:  #每行遍历,因为上一句,此时指针已经直到最后,所以遍历无效
        print(row)

在这里插入图片描述

import csv
with open(r"C:\Users\T\Desktop\salary.csv","r") as f:
    a_csv=csv.reader(f)
    #print(list(a_csv)) #以列表形式打印
    for row in a_csv:  #每行遍历
        print(row)

在这里插入图片描述

写csv文件

csv.writer()
a.writerow() #逐行写入
a.writerows() #批量写入

import csv

with open("ee.csv","w") as f:
    b_csv=csv.writer(f)
    b_csv.writerow(["ID","姓名","年龄"])
    b_csv.writerow(["001","张1","18"])#逐行写入
    c=[['002','张2','19'],['003','张3','22']]
    b_csv.writerows(c)  #批量写入

在这里插入图片描述

os和os.path模块

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

os调用操作系统文件和命令

os.system可以帮助我们直接调用系统的命令
在这里插入图片描述
在这里插入图片描述

import os
os.system("ping www.baidu.com")#ping命令

在这里插入图片描述

import os
os.system("cmd")

在这里插入图片描述

import os
#直接调用可执行的文件
os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

在这里插入图片描述

os模块-文件和目录操作

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

#coding=utf-8
#测试os模块中,关于文件和目录的操作
import os
#############获取文件和文件夹相关的信息################
print(os.name)  #windows-->nt linux和unix-->posix
print(os.sep)   #windows-->\  linux和unix-->/
print(repr(os.linesep))  #换行符 windows-->\r\n linux和unix-->\n\
print(os.stat("dd.py")) #获取文件信息

注:函数str( )将其转化成为适于人阅读的前端样式文本,而repr(object)就是原本未处理的用于编译器阅读的后台底层代码

os模块下常用操作文件的方法

在这里插入图片描述

os模块下关于目录操作的相关方法

在这里插入图片描述

##############关于工作目录的操作###############
print(os.getcwd())  #获得当前所在目录
os.chdir("d:/")  #改变当前工作目录为D盘
os.mkdir('书籍')   #创建目录
##############创建目录,创建多级目录,删除###############
os.mkdir('书籍')   #创建目录,相对路径都是相对于当前的工作目录
os.rmdir('书籍')   
os.makedirs('电影/港台/周星驰')
os.removedirs('电影/港台/周星驰')   #只能删除空目录
os.makedirs('../音乐/香港/刘德华')  #../指的是上一级目录
os.rename('电影','movie')  #将电影重命名为movie
dirs=os.listdir('movie')  #列出一级子目录、子文件(仅儿子,无孙子)
print(dirs)

os.path模块

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

#coding=utf-8
#测试os.path中关于目录,路径的操作
import os
import os.path  #from os import os.path

###########判断:绝对路径,是否目录,是否文件,文件是否存在######
print(os.path.isabs('d:/a.txt'))
print(os.path.isdir('d:/a.txt'))
print(os.path.isfile('d:/a.txt'))
print(os.path.exists('d:/a.txt'))
############获得文件基本信息############
print(os.path.getsize('b.txt'))
print(os.path.abspath('b.txt'))
print(os.path.dirname('d:/a.txt'))
print(os.path.getatime('b.txt'))
print(os.path.getmtime('b.txt'))
##############对路径的操作#############
path=os.path.abspath('b.txt')
print(os.path.split(path))
print(os.path.splitext(path))
print(os.path.join('aa','bb','cc'))

在这里插入图片描述

#coding=utf-8
#列出工作目录下所有的.py文件,并输出文件名
import os
path=os.getcwd()  #返回当前工作目录
file_list=os.listdir(path)  #列出子目录,子文件
for filename in file_list:
    if filename.endswith('py'):
        print(filename)
print('################')
file_list2=[filename for filename in os.listdir(path) if filename.endswith('py')]  #与上面方法同,生成器推导列出子目录
for f in file_list2:
    print(f)
print(file_list2)

在这里插入图片描述

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:
        all_files.append(os.path.join(dirpath,dir))
    for file in filenames:
        all_files.append(os.path.join(dirpath,file))

    #打印所有的子目录和子文件
    for file in all_files:
        print(file)

在这里插入图片描述

shutil模块(拷贝和压缩)

#测试shutil模块的用法,拷贝
import shutil
shutil.copyfile('1.txt','1_copy.txt')#拷贝文件
shutil.copytree('movie/港台','电影') #“电影”目录不存在时才能正常拷贝
shutil.copytree('movie/港台','电影',ignore=shutil.ignore_patterns('*.txt','*.html'))#ignore忽略不需要的文件
#压缩,解压缩
import shutil
import zipfile
shutil.make_archive('电影/gg','zip','movie/港台') #把movie/港台压缩到电影/gg,格式为zip
z1=zipfile.ZipFile('a.zip','w')#压缩,创建一个压缩名字为a的zip文件
z1.write('1.txt')
z1.write('1_copy.txt')#将1.txt和1_copy.txt文件压缩到a.zip中
z1.close()#记得关闭
z2=zipfile.ZipFile('a.zip','r')#解压缩a.zip
z2.extractall('电影')#解压缩到电影目录下
z2.close()#记得关闭

递归算法

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

#coding=utf-8
#测试递归算法
num=1
def a1():
    global num#如果要在函数内要改变全局变量的值,增加global关键字声明一下
    num+=1
    print('a1')
    if num<3:
        a1()
def b1():
    print('b1')

a1()

在这里插入图片描述

#coding=utf-8
#使用递归计算n的阶乘
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)#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('movie',0)
for f in reversed(allfiles):#reversed()函数,逆序打出
    print(f)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值