contents
CSV 文件的操作
csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出
特点 | csv | excel |
---|---|---|
值类型 | 所有值都是字符串 | 各种类型 |
字体颜色等样式 | 不能指定 | 可指定 |
单元格的宽高 | 不能指定 | 可指定 |
合并单元格 | 不可 | 可 |
多个工作表 | 不可 | 可 |
嵌入图像图表 | 不可 | 可 |
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"))
压缩
- 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()
递归算法
递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构:
- 定义递归头,即什么时候不调用自身方法,是递归的结束条件。若无将陷入死循环。
- 递归体。即什么时候需要调用自身方法。
示例:阶乘
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
print(factorial(4))