python基础之Day13 文件操作(2)

CSV 文件的操作

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出

特点csvexcel
值类型所有值都是字符串各种类型
字体颜色等样式不能指定可指定
单元格的宽高不能指定可指定
合并单元格不可
多个工作表不可
嵌入图像图表不可

csv 文件读取

csv.reader 对象

import csv
with open('exe.csv','r') as f:
    row_csv=csv.reader(f)
    headers = next(row_csv)  # 获得列表对象标题行的信息,这时指针到了标题行末
    print(headers)
    #['name', 'age', 'grade', 'rank']
    print(list(row_csv))  #这句结束指针到了文件末尾,要注释掉,才能正常运行后面的循环
    #[['name', 'age', 'grade', 'rank'], ['littleyueyue', '18', 'highschool', '150'], ['little_yue', '16', 'midleschool', '200'], ['yueyue', '20', 'university', '50']]
    for row in row_csv:
        print(row)
        # ['name', 'age', 'grade', 'rank']
        # ['littleyueyue', '18', 'highschool', '150']
        # ['little_yue', '16', 'midleschool', '200']
        # ['yueyue', '20', 'university', '50']

csv 文件写入

with open('exe2.csv','w',encoding='utf-8') as f:
    row_csv=csv.writer(f)
    #写入单行
    row_csv.writerow(['name', 'age', 'rank'])
    row_csv.writerow(['littleyueyue', '18',  '150'])
    #写入多行
    row_csv.writerows([['little_yue', '16', 'midleschool', '200'],['yueyue', '20', 'university', '50']])

OS和os.path模块

os 模块可以帮助我们直接对操作系统进行操作。可执行文件、命令,直接操作文件、目录等等。以下都是在windows系统下

调用操作系统命令

示例:
os.system 调用 windows 系统的记事本程序

import os
os.system('notepad.exe')

os.system 调用 windows 系统中 ping 命令

import os
os.system("ping www.baidu.com")

直接调用可执行文件

用os.startfile
示例:
运行安装好的微信

import os
os.startfile(r""C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"")

文件和目录操作

操作文件的方法名描述
remove(path)删除指定的文件
rename(src,dest)重命名文件或目录
stat(path)返回文件的所有属性
listdir(path)返回 path 目录下的文件和目录列表
import os
#############获取文件和文件夹相关的信息################
print(os.name) #返回当前系统类型 windows->nt linux 和 unix->posix
print(os.sep) #返回当前操作系统所使用的路径分隔符 windows->\ linux 和 unix->/
print(repr(os.linesep)) #返回当前平台使用的换行符 windows->\r\n linux-->\n\
print(os.stat("02.py"))#返回当前文件信息
操作目录的方法名描述
mkdir(path)创建目录
(如非完整路径都是相对于当前工作目录,也可用…/表示上一级目录,下同)
makedirs(path1/path2/path3/…)创建多级目录
rmdir(path)删除目录
removedirs(path1/path2…)删除多级目录(目录为空才能删除)
getcwd()返回当前工作目录:current work dir
chdir(path)把 path 设为当前工作目录
walk()遍历目录树
listdir(path)列出所给路径下的子目录和子文件
sep当前操作系统所使用的路径分隔符

示例:

##############关于工作目录的操作###############
print(os.getcwd()) #返回当前工作目录
os.chdir("d:") #改变当前的工作目录为:d:盘根目录
os.mkdir("书籍")#在当前目录下创建目录
os.makedirs("../音乐/台湾/周杰伦") #../指的是上一级目录

os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作

方法描述
isabs(path)判断 path 是否绝对路径
isdir(path)判断 path 是否为目录
isfile(path)判断 path 是否为文件
exists(path)判断指定路径的文件是否存在
getsize(filename)返回文件的大小
abspath(path)返回绝对路径
dirname§返回目录的路径
getatime(filename)返回文件的最后访问时间
getmtime(filename)返回文件的最后修改时间
walk(top,func,arg)递归方式遍历目录
join(path,*paths)连接多个 path
split(path)对路径进行分割(把目录和文件名分开),以列表形式返回
splitext(path)从路径中分割文件的扩展名

示例:列出指定目录下所有的.py 文件,并输出文件名

#方法一
import os.path
path = os.getcwd()
file_list = os.listdir(path) #列出所给路径下的子目录和子文件
for filename in file_list:
    pos = filename.rfind(".")
    if filename[pos+1:]=="py":
    print(filename,end="\t")
    
#方法二
file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py") ]
for filename in file_list2:
    print(filename,end="\t")

walk()递归

返回一个 3 个元素的元组,(dirpath, dirnames, filenames),
dirpath:要列出指定目录的路径
dirnames:目录下的所有文件夹(列表形式返回)
filenames:目录下的所有文件(列表形式返回)

import os
path = os.getcwd()
list_files = os.walk(path)
print(list(list_files))
# [
#('E:\\PycharmProjects\\excpt', ['.idea'], ['1030.py', 'edit.gif', 'edit.txt', 'edit2.jpg', 'edit2.txt', 'exe.csv', 'exe2.csv']), 
#('E:\\PycharmProjects\\excpt\\.idea', [], ['encodings.xml', 'excpt.iml', 'misc.xml', 'modules.xml', 'workspace.xml'])
#]

all_files = []
for dirpath,dirnames,filenames in list_files:
	for dir in dirnames:  #因为dirnames是一个列表,os.path.join()不能合并列表
		all_files.append(os.path.join(dirpath,dir))  #dirpath是当前(子目录)的完整路径
	for name in filenames: #因为filenames是一个列表,os.path.join()不能合并列表
		all_files.append(os.path.join(dirpath,name))

shutil 模块

shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。这些 os 模块都没有提供。

拷贝

shutil.copyfile()

import shutil

#拷贝文件shutil.copyfile('待拷贝对象位置、文件名','拷贝后的位置、文件名')
shutil.copyfile('edit2_copy.txt','./电影/小猪/edit2_copy.jpg')

#拷贝目录(新的目录不存在时才能进行正常的拷贝,已存在的会报错)
shutil.copytree('电影','movie')
#将电影目录下的内容都拷贝到新目录下

#通过ignore参数设置复制时忽略的文件类型
shutil.copytree("movie","音乐",ignore=shutil.ignore_patterns("*.txt","*.htm"))

压缩

  1. shutil.make_archive(‘压缩完储存的地址和文件名’.‘压缩文件的格式,如zip’,‘压缩的内容’)
import shutil

shutil.make_archive('音乐/压缩文件名','zip','movie')

在这里插入图片描述
2. 用zipfile模块
zipfile.ZipFile(‘压缩文件的文件名.zip’,‘w’)
后续再将要压缩的内容写入write(要写到具体的文件名,否则传入的是空文件夹),或解压extractall(‘解压到的地址’)

import zipfile

# 压缩
a=zipfile.ZipFile('ZIP文件.zip','w')
a.write('movie/明星介绍.txt')
a.write('电影/小猪') #压缩的是一个空的文件夹 
a.close()

b=zipfile.ZipFile('ZIP文件.zip','r')
b.extractall(r'E:\PycharmProjects\excpt\电影') #导入解压到的文件目录
b.close()

递归算法

递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构:

  1. 定义递归头,即什么时候不调用自身方法,是递归的结束条件。若无将陷入死循环。
  2. 递归体。即什么时候需要调用自身方法。
    示例:阶乘
def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)
print(factorial(4))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值