Python文本操作

#文本内容的替换
import os # 导入os模块

import time # 时间模块

# 优点:不用关闭句柄, 自动关闭连接
with open("唐诗", mode="r", encoding="utf-8") as f1,\
open("唐诗_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
line = line.replace("善良", "sb")
f2.write(line)

time.sleep(5)
os.remove("唐诗") # 删除源文件
time.sleep(5)
os.rename("唐诗_副本", "唐诗") # 把副本改名成源文件

# 对有标题的文本处理(提取标题,把内容加入字典)
f = open("水果.data", mode="r", encoding="utf-8")
titles = f.readline().strip() # 读取第一行 id,name,price,num
t_list = titles.split(",") # 【id,name,price,num】

lst = []
for line in f: # "1,苹果,500,60000" {id:1,name:liulian, num:xx, price:xxx}
dic = {}
ll = line.strip().split(",")
for i in range(len(t_list)):
dic[t_list[i]] = ll[i]
lst.append(dic)
f.close()
print(lst)

#修改文本变成另外的格式,并求和
# name:apple price:10 amount:3 year:2012
# name:tesla price:100000 amount:1 year:2013
# .......
#
# 通过代码,将其构建成这种数据类型:
# [{'name':'apple','price':10,'amount':3},
# {'name':'tesla','price':1000000,'amount':1}......]
# 并计算出总价钱。
f = open("money.txt", mode="r", encoding="utf-8") # name:apple price:10 amount:3 year:2012
result = []
for line in f:
dic = {}
lst = line.split() # 根据空白切
# 向字典中添加数据
for el in lst:
print(el) # name:apple第一行[0] price:10第二行[1]
dic[el.split(":")[0]] = el.split(":")[1] # 数据已经添加完了# 放在列表中
result.append(dic)
print(result)
# [{'name': 'apple', 'price': '10', 'amount': '3', 'year': '2012'},
# {'name': 'tesla', 'price': '100000', 'amount': '1', 'year': '2013'}]
sum = 0
for el in result:
sum += int(el['price']) * int(el['amount'])
print(sum)
-------------------------------------------------------------------------------------------
以下是对字典dict{}/list[]/元祖(,)/集合set{}总结:

dic增加

# 流程: 1.先判断key是否存在。 如果存在,就不执行新增, 如果不存在, 执行新增
dic.setdefault("宫本武藏", "很牛B")
dic["王者荣耀"] = "最近我才知道" # dic[字典中不存在的key] = value

dic删除

# dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
# dic.pop("刘能") # 指定某个key进行删除
# dic.pop("王语嫣")
# dic.popitem() # 实际上是随机删除的
# dic.clear()
# del dic["紫薇"]
dic.update(dic2) # 把dic2中的内容覆盖到dic中(K不变)也相当于添加或修改
列表和字典不能在循环的时候进行删除.
把要删除的内容记录在一个新列表中。 然后循环新列表。 删除老列表(字典)

dic 查询

dic[key]
# print(dic.get("小燕子")) # 当key不存在的时候不会报错。 默认返回None
# print(dic.get("紫薇","没有")) # 两个参数. 如果第一个参数不存在。 返回第二个参数作为默认值, 如果存在直接返回value
# print(dic.keys()) # 返回的内容像列表。但不是列表
# for k in dic.keys(): # 可以迭代。 拿到的是每一个key
#     print(k)
# print(dic.values()) # 所有的value返回。 像列表。但不是列表
# for v in dic.values():
#     print(v)

# print(dic.items()) # 返回键值对。 (key, value)
# 遍历字典的最好的方案
# for k, v in dic.items(): # item是元组 (key, value)
#     print(k, v) # 直接拿到key和value

List删除

ret = lst.pop() # 返回值是被删除的元素

list切片删除

切片删除
# del lst[2] # 类似pop
# del lst[2:] # 批量删除
# del lst[1:5:2] # 切片删除

list清空列表

# list.clear()

 

list插入

# 插入
# lst.insert(0, "建国大业") # 插入, 效率不高. 索引的变更
# lst.extend(["倚天屠龙记", "乡村爱情"])

list新增

# lst.append("找到你")

list查询

# for food in lst: # 列表可以使用for循环。 list是一个可迭代对象
#     print(food)

 

fromkeys()
    返回创建的新字典
    fromkeys("abc", [])
    {a:[], b:[], c[]}
# 元组如果只有一个元素。必须加逗号
# t1 = (1, 3, 5, 7, 9,) # () 运算符 优先级
# lst = ["哈哈", ]
# print(t1)
# print(lst)

     元组的不可变. 元组的不可变指的是元组内部第一层元素的内存地址

t = ("周润发", "周星驰", ["渣渣辉","古天绿","陈小春"])
t[2].append("李嘉诚")
print(t)
# 字典:{}
# 字典的key: 不可变,不能重复, 底层存储是无序的

# 集合:{}set
# 集合里的元素: 不可变,不能重复. 底层也是无序的。 hash

# 集合其实就是字典. 集合里面不存value , 集合中只存储key
# # 应用(重点) 去重复
# lst = ["周杰伦", "周杰伦", "王力宏", "王力宏", "胡辣汤"]
# s = set(lst) # 集合
# print(s)
# # 转化成列表
# print(list(s))


# frozenset 可哈希的集合, 不可变.
s = frozenset([1,2,3,4,5])
print(s) # frozenset({1, 2, 3, 4, 5})
for el in s:
print(el)
# 1
# 2
# 3
# 4
# 5


posted on 2018-11-05 20:20  手把花锄出乡帘  阅读(142)  评论(0编辑  收藏  举报

导航