文章目录
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)