目录
os模块、操作目录/文件、实训大作业
1、Python中的地址引用
list1 = []
list2 = []
for i in range(65, 91):
list1.append(chr(i));
a = list1.copy(); # !!!
list2.append(list1);
print(list2)
print("--------------------------------------")
s1 = [1, 2, 3, 4]
s2 = [6, 7, 8, 9]
s1.append(s2)
print(s1); # [1, 2, 3, 4, [6, 7, 8, 9]]
s2 = [1];
print(s1); # [1, 2, 3, 4, [6, 7, 8, 9]]√ or [1,2,3,4,[1]]
print(s2); # [1]
2、os模块(操作系统模块)
2.1、os案例1
import os # 不需要安装,内置模块,直接使用即可
# 查看当前目录下的所有内容(文件、文件夹),命令执行所在目录或.py文件所在目录
# listdir
ls = os.listdir('.');
print(ls) # ['day01-am-01.py', 'day01-pm-01.py', ...
# 绝对路径:absolute path——>os.path.abspath
p1 = os.path.abspath("."); # 查看当前目录是哪个目录
print(p1); # F:\JetBrains\2pythonSpace\pythonCode\实训lwx作业
p2 = os.path.abspath("test01.py");
print(p2) # F:\JetBrains\2pythonSpace\pythonCode\实训lwx作业\test01.py
# 当我们需要精准的读写某个位置的文件时,需要得到一个绝对路径
print(dir(os)) # 查看os模块的所有函数
2.2、os案例2
import os # 不需要安装,内置模块,直接使用即可
# 新建文件夹
d1 = r'C:\Users\lwx\Desktop\测试目录';
os.mkdir(d1);
# 多层级创建目录
d2 = r'C:\Users\lwx\Desktop\测试目录1\a\b';
os.makedirs(d2);
# 判断路径是否存在
b1 = os.path.exists(d2);
print(b1) # True
b2 = os.path.exists(r'C:\Users\lwx\Desktop\测试目录\a.txt');
print(b2) # False
2.3、os案例3
import os # 不需要安装,内置模块,直接使用即可
print(dir(os.path)) # os.path子模块中也有很多函数
# isabs:判断是否为绝对路径
# isdir:判断是否为目录
# isfile:判断是否为普通文件
b3 = os.path.isabs(r'C:\Users\lwx\Desktop\测试目录');
print(b3) # True
f1 = r'C:\Users\lwx\Desktop\pythonTest\test01.py';
# 获取文件名,字符串操作
fname = f1.split('\\')[-1];
print(fname) # test01.py
# path的spilt
ls = os.path.split(f1); # 两部分tuple:目录、文件名
print(ls[0]) # C:\Users\lwx\Desktop\pythonTest
print(ls[1]) # test01.py
# 直接使用dirname可以获取所在目录
print(os.path.dirname(f1)) # C:\Users\lwx\Desktop\pythonTest
# join,拼接:目录、文件名
f2 = os.path.join(r'C:\Users\lwx\Desktop\python', 'c.txt');
print(f2) # C:\Users\lwx\Desktop\python\c.txt相当于r'C:\Users\lwx\Desktop\python' + "\\" + 'c.txt'
2.4、os案例4
# 1.有目录:C:\Users\lwx\Desktop\pythonTest
# 2.打印其中.py文件的绝对路径
# 3.统计有几个.py文件
# 4.统计所有的.py文件内容,加起来一共有多少行
# 5.将所有的.py文件,复制到C:\Users\lwx\Desktop\测试目录中
import os # 不需要安装,内置模块,直接使用即可
root = r'C:\Users\lwx\Desktop\pythonTest';
fs = os.listdir(root); # 列出此目录下的所有文件
print(fs)
pys = [];
for f in fs:
if f.endswith('.py'):
pys.append(os.path.abspath(f)); # os.path.abspath(f)
# pys = [os.path.abspath(x) for x in fs if x.endswith('.py')]; # python的简洁语法
print(pys)
print("len(pys):", len(pys))
ct = 0; # 计数:所有的py文件一共多少行
for py in pys:
f = open(py, 'r', encoding='utf-8');
content = f.read(); # 读到一个大的字符串
f.close();
linenum = content.count('\n'); # count函数
ct = ct + linenum; # 求和
print("ct:", ct)
root2 = r'C:\Users\lwx\Desktop\测试目录';
for py in pys:
f = open(py, 'r', encoding='utf-8'); # 'C:\\Users\\qx\\Desktop\\python\\1-1.py'
content = f.read();
f.close()
# 获取文件名称
fname = os.path.split(py)[1]; # 1-1.py
# 拼接生成目标路径
destfile = os.path.join(root2, fname); # C:\Users\qx\Desktop\测试目录\1-1.py
f = open(destfile, 'w', encoding='utf-8');
f.write(content);
f.close();
2.5、os案例5
使用程序完成如下功能:
在桌面(C:\Users\qx\Desktop)上创建一个test目录(如已经有了,就使用,没有再创建)
在test目录中,创建10个文件夹 ,名字为0-9
在每个文件夹中,创建随机层数(1-26)的子文件夹嵌套,子文件的名字依次是 A\B\C\D\E\F\G\H\I....Z
在最后一个文件夹中,编写一个.txt文件,文件的内容为hello,文件名为最顶层文件夹的名字(0-9)
编程思路:跟编程语言是无关的~~
多看,多理解,多用脑子执行。
咦,老师都能想到,我却想不到,是不是我不适合写代码呢???否!
咦,大家都能想到,我却想不到,是不是我不适合写代码呢???否!
能想到 ---->不是基于智商,而是基于经验!!!【见的足够多了,写的足够多了,自然就有思路了。】
# 使用程序完成如下功能:
# 在桌面(C:\Users\lwx\Desktop)上创建一个test目录(如已经有了,就使用,没有再创建)
# 在test目录中,创建10个文件夹 ,名字为0-9
# 在每个文件夹中,创建随机层数(1-26)的子文件夹嵌套,子文件夹的名字依次是A\B\C\D\E\F\G\H\I...Z
# 在最后一个文件夹中,编写一个.txt文件,文件的内容为hello,文件名为最顶层文件夹的名字(0-9)
# 手动演示、5分钟思考,15行左右
import os;
import random;
root = r'C:\Users\lwx\Desktop\test';
if not os.path.exists(root): # 如果没有就创建
os.mkdir(root);
for i in range(10):
d = os.path.join(root, str(i)); # 0~9的路径
os.mkdir(d);
# 随机层数
num = random.randint(1, 26); # 假设是3--->\A\B\C
for j in range(num): # 随机num次
d = os.path.join(d, chr(65 + j)); # 循环第一次拼接\A,循环第二次继续拼接\B,循环...
# 多层目录创建
os.makedirs(d); # C:\Users\qx\Desktop\test\0\A\B\C
# 写入.txt文件
d = os.path.join(d, '{}.txt'.format(i)); # 文件路径
f = open(d, 'w');
f.write('Hello~');
f.close();
print("OVER!")
2.6、os案例6
学以致用,课堂练习:考勤目录中存放的是所有的考勤excel表格,从第1天~第9天,表中关键的信息就是,学生当天看了多久的直播。
要求,利用所学知识,读取每个excel表格,统计出来每个学生,一共看了多久的直播。x小时y分钟,不考虑秒。一个小时完成,一会儿我跟大家一起,同步写代码。 pandas---os,上课的考勤数据,是我打分的评判标准。
在生活场景中,pandas处理表格,还是非常常用的,借此机会,我们再来复习应用一下~
'''
学以致用,课堂练习:考勤目录中存放的是所有的考勤excel表格,从第1天~第9天,表中关键的信息就是,学生当天看了多久的直播。
要求,利用所学知识,读取每个excel表格,统计出来每个学生,一共看了多久的直播。x小时y分钟,不考虑秒。
'''
import pandas as pd
import os
# 直接拷贝所有的学生姓名
names = ['aaa', 'bbb'];
print(len(names)) # 73名学生
# 列车所有文件
root = r'C:\Users\lwx\Desktop\考勤';
fs = os.listdir(root);
# 得到绝对路径
fs = [os.path.join(root, x) for x in fs];
print(fs)
infos = {}; # 存储每个学生的观看信息,结构为 '张三':['3小时24分' ,'2小时13分'....]
# 依次读取文件
for f in fs:
df = pd.read_excel(f); # 得到dataframe
# 获取第一列的数据 ,主要就是人名
col_names = list(df.iloc[:, 0]); # 外部要套list
# 遍历学生,找到每个学生出现在第几行,
# 根据行号,找第二列就是观看信息
for name in names:
if name in col_names:
index = col_names.index(name);
time = df.iloc[index, 1]; # 得到观看时长
# 放入dict中
if name in infos:
infos[name].append(time);
else:
infos[name] = [time];
print(infos); # OK,得到数据
print(infos['xxx'])