3 列表循环-字典循环-删除-文件操作

1 列表循环

for item in lst:  如果你只需要拿到元素
for i in range(len(lst)):  不光需要拿到元素, 还需要拿到索引

in lst

lst = ["小姨多鹤_sb", "linux核心编程_sb", "shell脚本大全_sb", "linux私房菜_sb"]
for item in lst:
    item = item.replace("_sb", "")
    print(item)

结果
小姨多鹤
linux核心编程
shell脚本大全
linux私房菜

in range

lst = ["小姨多鹤_sb", "linux核心编程_sb", "shell脚本大全_sb", "linux私房菜_sb"]

for item in lst:
    print(item)

for i in range(len(lst)):
    item = lst[i]
    item = item.replace("_sb", "")
    lst[i] = item
print(lst)

结果
小姨多鹤_sb
linux核心编程_sb
shell脚本大全_sb
linux私房菜_sb
['小姨多鹤', 'linux核心编程', 'shell脚本大全', 'linux私房菜']

2 字典循环

for k in dic: 循环直接拿到每一个key
for k, v in dic.items(): 循环字典直接拿到key和value
第一种 in dic
dic = {"赵本山": "劝说小丑", "范伟": "道士下山", "郭德纲": "祖宗十九代"}

for item in dic:
    print(item, dic[item])

结果
赵本山 劝说小丑
范伟 道士下山
郭德纲 祖宗十九代
第二种,in dic.items() 可以直接拿到k, v
dic = {"赵本山": "劝说小丑", "范伟": "道士下山", "郭德纲": "祖宗十九代"}
for k, v in dic.items():  # (key, value)
    print(k, v)

结果
赵本山 劝说小丑
范伟 道士下山
郭德纲 祖宗十九代

自动解包

a, b = (1, 2)  # 元祖自动解包, 解构
print(a)
print(b)

结果
1
2

3 列表和字典的删除-有大坑

列表的删除,把需要删除的元素找到,然后存到新列表,循环新列表,从老列表中删除。

原因:删除索引0后,1(张无忌)会移动到0位置,后面依次类推,张大郎移到1,第二次循环时会删除张大朗,而张无忌没有删除。

lst = ["张本山", "张无忌", "张大郎", "张alex", "小妞"]
new_lst = []
for item in lst:
    if item.startswith("张"):
        # lst.remove(item) # 删除,删除索引0后,1(张无忌)会移动到0位置,后面依次类推,张大郎                         
        new_lst.append(item) # 把要删除的内容记录在一个新列表中
for item in new_lst:  # 循环新列表, 删除老列表
    lst.remove(item)
print(lst)

结果
['小妞']

字典的删除

dic = {"赵本山": "劝说小丑", "范伟": "道士下山", "郭德纲": "祖宗十九代"}
lst = []
for k in dic:
    print("取出key", k)
    lst.append(k)
print("存到新列表",lst)
print("分割线")
for item in lst:
    print("删除key",item)
    dic.pop(item)

print(dic)

结果
取出key 赵本山
取出key 范伟
取出key 郭德纲
存到新列表 ['赵本山', '范伟', '郭德纲']
分割线
删除key 赵本山
删除key 范伟
删除key 郭德纲
{}

案列统计车牌数量

思路

# 1. 拿到每一个车牌子
# 2. 拿到车牌的简称
# 3. 通过简称去拿省份名称
# 4. 统计车牌的数量????
cars = ['鲁A32444', '鲁B12333', '京B8989M', '黑C49678', '黑C46555', '沪B25041', '黑C34567']
locations = {'沪': '上海', '京': '北京', '黑': '黑龙江', '鲁': '山东', '鄂': '湖北', '湘': '湖南'}

result = {}
for car in cars:  # 鲁A32444
    loc = car[0]  # 鲁
    prov = locations[loc]  # 山东
    # 分成两种情况
    # 如果字典中有这个省份. 只需要value+1即可
    if result.get(prov):  # 去字典中查找这个省份信息. 如果找到了. 返回的是数字, 如果找不到返回的是None
        result[prov] += 1
    else:  # 如果字典中没有这个省份. 需要新增一个省份:1
        result[prov] = 1

print(result)

结果
{'山东': 2, '北京': 1, '黑龙江': 3, '上海': 1}

4  编码

ascii : 英文大小写字母, 数字, 标点符号(英文), 计算机操作符
    一个ascii由8bit01 组成. 256个文字 只用到了前7位. 字节. 1个byte表示8个01
gbk : 国标码(guo biao kuo) 16个01组成    2byte,  最多能表示65536个文字.
    中文, 日文, 韩文, 蒙古文, 藏文. 繁体中文. 兼容ascii
unicode: 万国码, 由32个bit组成, 4byte
    不能进行存储和传输
    ucs-2 拿出uncode的一个面进行使用(python默认用的是它)
    ucs-4 由32个bit组成
utf-8 : unicode的实现, 可变长度的unicode
    英文:  8bit  1byte
    欧洲: 16bit  2byte
    其他: 24bit  3byte
utf-8和gbk不能直接转换
编码:  encode()
解码:  decode()

5 文件操作

open(文件路径, mode="模式", encoding="编码规则")
for line in f:
    读取文件中的每一行数据
f.read()
f.write()
模式:
    r 只读
    w 只写
    a 只能追加写
    + 扩展
    r+ 读写操作
    w+ 写读操作
    a+ 追加写读操作
    b bytes 读取和写入非文本文件
    .exe  .zip .rar .jpg

r读文件

f = open("E:/资料/test.txt", mode="r", encoding="utf-8")
print(f.read())  # 文件的内容全部读取出来,如果文件大容易导致内存溢出问题
# print(f.read(3)) # 读3行

# 推荐
for line in f: # 把文件中的每一行读取出来
    print(line.strip())
f.close()

把print输出换行的\n替换为空

print("娃哈哈", end="")
print("矿泉水", end="")
结果
娃哈哈矿泉水

w写文件,每次执行open时,会清空原文件

# 写: 能创建文件, w模式会自动的清空源文件
f = open("呵呵呵.txt", mode="w", encoding="utf-8")
f.write("你好\n")
f.write("我也好")
f.close()
a写文件,追加
# a: append追加. 在原来文件的基础上写入内容
f = open("哈哈哈.txt", mode="a", encoding="utf-8")
f.write("你好111")
f.close()
r+读写模式
f = open("哈哈哈.txt", mode="r+", encoding="utf-8")
print(f.read())
f.write("我很好")
f.close()

文件复制:不要有编码,边复制边写

f = open()  

f.close()

等同于

with open() as f
with open("c:/崔万志-不抱怨-靠自己.flv", mode="rb") as f1, open("d:/崔万志-不抱怨-靠自己.flv", mode="wb") as f2:
    for part in f1:
        f2.write(part)

文件剪切

import os # 导入os模块
with open("c:/崔万志-不抱怨-靠自己.flv", mode="rb") as f1, open("d:/崔万志-不抱怨-靠自己.flv", mode="wb") as f2:
    for part in f1:
        f2.write(part)
os.remove("d:/崔万志-不抱怨-靠自己.flv")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值