python基础知识-第10节


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

1.file文件操作

创建文件对象open()
在这里插入图片描述

1.1write()/writelines()写入文件

close()关闭文件流

#测试关闭文件流
try:
    f = open(r"a.txt","a")
    str = "\ngaoqi\n"
    f.write(str)
    strs = ["aa\n","bb\n","cc\n"]
    f.writelines(strs)
except BaseException as e:
    print(e)
finally:
    f.close()

1.2 with语句(上下文资源管理器)

#测试with管理文件写入操作
strs = ["高琪\n","高老二\n","高老三\n"]
with open(r"a.txt","a") as f:
    f.writelines(strs)

1.3 文本文件的读取

1.read(【size】)
从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾会返回空字符串

#测试read文件读取
with open(r"e.txt","r",encoding="utf-8") as f:
    str = f.read(4)
    print(str)
#测试读取整个文件
with open(r"e.txt","r",encoding="utf-8") as f:
    for a in f:
        print(a,end="")

2.readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串

3.readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表

enumerate()函数的使用

#测试读取、更改内容
with open("e.txt","r",encoding="utf-8") as f:
    lines = f.readlines()
    lines = [line.rstrip()+" #"+str(index+1)+"\n" for index,line in enumerate(lines)] #推导式生成列表

with open("e.txt","w",encoding="utf-8") as f:
    f.writelines(lines)
# 测试二进制文件拷贝
with open("aa.gif","rb") as f:
    with open("aa_copy.gif","wb") as w:
        for line in f.readlines():
            w.write(line)
print("图片拷贝完成")
# 测试读取文件名f.name(),读取指针位置f.seek()
with open("a.txt","r",encoding="utf-8") as f:
    print("文件名是:{0}".format(f.name))
    print(f.tell())
    print("读取的内容:{0}".format(str(f.readline())))
    print(f.tell())
    f.seek(5)
    print("读取的内容:{0}".format(str(f.readline())))
    print(f.tell())

1.4 使用pickle序列化

pickle内部实现序列化a1 = b1…等,但是a1和b1的id不同,表示不是同一个对象

# 测试pickle
import  pickle

a1 = "高琪"
a2 = 234
a3 = [10,20,30,50]

with open("data.dat","wb") as f:
    pickle.dump(a1,f)
    pickle.dump(a2,f)
    pickle.dump(a3,f)

with open("data.dat","rb") as f:
    b1 = pickle.load(f)
    b2 = pickle.load(f)
    b3 = pickle.load(f)

    print(id(a1));print(id(b1))

1.5 CSV文件的操作

表格内容用逗号分隔开了

# 测试测试CSV文件的读取和写入
import csv
with open("dd.csv","r") as f:
    a_csv = csv.reader(f)
    print(list(a_csv))
    for row in a_csv:
        print(row)
with open("ee.csv","w") as f:
    b_csv = csv.writer(f)
    b_csv.writerow(["id","姓名","年龄"])
    c = [["1002","茜茜","3"],["1004","东东","4"]]
    b_csv.writerows(c)

2. os和os.path模块

# 测试os
import os
# os.system("notepad.exe")
# os.system("regedit")
#os.system("ping www.baidu.com")
#os.system("cmd")
#直接调用可执行文件
os.startfile(r"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

2.1 os模块_文件和目录操作

在这里插入图片描述
在这里插入图片描述

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

print(os.stat("mypy01.py"))

#关于工作目录的操作
print(os.getcwd())
os.chdir("e:")  #改变当前的工作目录为e:\盘根目录
os.mkdir("书籍")

#创建目录、创建多级目录、删除
os.mkdir("书籍")
os.rmdir("书籍")  #相对路径都是相对于当前的工作目录

#os.makedirs("电影/港台/周星驰")   #只能删除空目录
os.removedirs("电影/港台/周星驰")
os.makedirs("../音乐/香港/刘德华") #../指的是上一级目录
os.rename("电影","movie")

dirs = os.listdir("movie")
print(dirs)

2.2 os.path模块

在这里插入图片描述

#coding=utf-8
#测试os.path中关于目录、路径的操作
import os
import os.path
print(os.path.isabs("e:/a.txt"))

#或者写为
import os
from os import path
print(path.isabs("e:/a.txt"))
#coding=utf-8
#测试os.path中关于目录、路径的操作
import os
import os.path
#判断:绝对路径、是否目录、是否文件、文件是否存在
print(os.path.isabs("e:/a.txt"))    #True
print(os.path.isdir("e:/a.txt"))    #False
print(os.path.isfile("e:/a.txt"))   #False(因为a.txt不存在)
print(os.path.exists("e:/a.txt"))   #False

#获取文件基本信息
print(os.path.getsize("e:/a.txt"))
print(os.path.abspath("e:/a.txt"))
print(os.path.dirname("e:/a.txt"))
print(os.path.getctime("e:/a.txt"))
print(os.path.getatime("e:/a.txt"))
print(os.path.getmtime("e:/a.txt"))

#对路径的操作
path = os.path.abspath("e:/a.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,end="/t")

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

os.walk()方法:
返回一个三个元素的元组,(dirpath,dirnames,filenames)
dirpath:要列出指定,目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件

# coding=utf-8
# 测试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)

3.shutil模块

3.1 拷贝

# coding=utf-8
# 测试shutil模块的用法:拷贝、压缩
import shutil

#shutil.copyfile("a.txt","a_copy.txt")

#shutil.copytree("s/sss","a/aaa")    #只能拷贝到不存在的目录

shutil.copytree("s/sss","a/aaa",ignore=shutil.ignore_patterns("*.txt","*.html"))    #可以忽略txt/html等格式的文件

3.2 压缩

#压缩/解压缩
import  zipfile #压缩工作可以更加精细
#shutil.make_archive("电影/gg","zip","电影/港台")
# z1 = zipfile.ZipFile("e:/a.zip","w")
# z1.write("a.txt")
# z1.write("a_copy.txt")
# z1.close()

z2 = zipfile.ZipFile("e:/a.zip","r")
z2.extractall("a")
z2.close()

4. 递归算法

递归包括:递归头、递归体

# coding=utf-8
# 测试递归算法,使用递归计算阶乘

def factorial(n):
    if n == 1:
        return n
    else:
        return n*factorial(n-1)

i = 15
print("{0}的阶乘为:{1}".format(i,factorial(i)))

使用递归展示一个树结构

# coding=utf-8
# 递归打印所有的目录和文件

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("a",0)

for f in reversed(allFiles):
    print(f)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值