Python实训day10am【Python中的地址引用、os模块】

目录

1、Python中的地址引用

2、os模块(操作系统模块)

2.1、os案例1

2.2、os案例2

2.3、os案例3

2.4、os案例4

2.5、os案例5

2.6、os案例6


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'])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upward337

谢谢老板~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值