python Ai 应用开发基础训练,字符串,字典,文件
-------------------------------------- 编程能是大模型应用的天花板..................................................................
所以要好好将大模型应用在企业一定要好好练好最看不起的一环,基础能力
字符串处理 本文档来自老男孩培训Alex 课程记录,
我在2017年听过这个老师的课,非常不错,所以在写Ai 应用开发的时候,在基础部份会参考高手的成果
name = "my name is alex"
pring(name.caitalize()) 首字母大写
pring(name.count("my")) 统计字符串出现的次数,可以是单字或多词
print(name.casefold())
这个说是转换写成小写,还会对特殊字符处理,一处理就可能不是我们想要的了,况且还有更好的相同功能的方法,所以很少少用,用不着
pring(name.center(50,"_")) 居中打印,打印50个字符,不够用——补位
print(name.ljust(50,"***")) 左边对齐,右边的用*** 代替,补齐50位
print(name.rjust(50,'*')) 右对齐,不多的补**
print("A".lower()) 大写转小写 "upp".upper() 小写转大写
"\nAlex\n".lstrip() 左边去空格 rstip() 去掉右边 strip() 去掉空格
pring(name.encode) 编码相关,将二进制编成字节
pring(name.endswith("alex")) 是否是这个结尾 返回true 或 false
pring(name.expandtabs(tabsize = 30)) 字符串中出现的\t 等于多少个空格
pring.find("y") 找到字符串的索引取出来,用于切片时候用 那么。name[name.find("name") :])
pring(name.format(name="alex",year = 33)) 格式化字符串,将字符串中的{name} 变量替换
print(name.format_map({}) 可以传一下字字賟 来格式化字符串,通常format 就够用了
pring(name.isalnum) 是不是阿拉伯数字
print (''ssss".isalpha()) 是不是纯英文
print("1A".isdecimal) 是不是只包括十进制
print("1A".isdigit) 是不是整数
title(),将字母的首字母变大写
translate 映射
majetrabs 这二个方法一起使用,先用majetrabs 创建一个射映表,然后translate 转换
# 创建字符映射表 mapping = str.maketrans("aeiou", "12345") # 使用translate()方法进行字符替换 string = "Hello, World!" translated_string = string.translate(mapping) print(translated_string) 输出结果是 H2ll4, W4rld! 解释 先给aeiou 映一个其它字符,然后在使用中遇到这几个字符就替换成映射字符,比较好理解
replace 替换
print("xsy".isidentifier()) 是不是一个合法的变量名。支持中文英文,但是不能数字开头
print("33.33".isnumeric())是不是只有数字
"my".isprintable 是不是包括可打针印的,其实就是说这个字符中是不是非输出的法字符,说是说\n \t 这样的字符,有制表符会返false
istitle() 是不是每个单词都 是首字母大写,单词之间有空格
join '+++'.join(['a','b','c']) 将列表的元素用什么点连起来。
split() 将字符串切成列表
string = "Hello, World! How are you?" words = string.split() print(words) //输出结果 ['Hello,', 'World!', 'How', 'are', 'you?']
字典操作
可以将每个人的信息保存起来,比如省市县的关联信息,一个人信息这些都 可以用字典来保存,
info = {"姓名":"张三"}} 有索引,有信息的元素叫做字典,
编程中叫有key和valu由于是key 是唯 一的,所以字母无序,
假设一个字典是这样子
info = { "stu1101": "TengLan", "stu1102": "Loula", "stu1103": "Maliy" } name = info["stu1101"] print(name) # 输出: TengLan
打印这个字典方式是: for key, value in info.items(): print(key, value)
取出一个值:
print(info["stu1101"])
查找
"stu1101" in info //True
info["stu11011"] 查找这个值,但是这个值如果没有会报错,用get不会错,info.get("stu11011")
修改一个值
info["stu1101"] = "武腾兰"
删除
del info["11011"] 删除
info.pop("stu11011")
info.popitem()随便删一个
更新整个字典,可以用一个新字典更新,相同dey 覆盖,不同的增加 info.update(b)
将一个例表转换为列表 info.item()
info.formdeys([6,7,9])创建一个新字典,key 是6,7,8
c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444])
运行结果是:
{
6: [1, {"name": "alex"}, 444],
7: [1, {"name": "alex"}, 444],
8: [1, {"name": "alex"}, 444]
}
以下代码是说dict.fromkeys()如果用以下方式创建的话,可以value 是一个引用的值,以后修改其中一个值,会影起其它值改变,
在这个代码段中,c 是通过 dict.fromkeys() 方法创建的字典,该方法的作用是使用指定的键列表创建一个新字典,其中所有的值默认为 None 或者指定的默认值。 c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444]) c = dict.fromkeys([6, 7, 8], [1, {"name": "alex"}, 444]) 运行这段代码后,c 的内容将是: { 6: [1, {"name": "alex"}, 444], 7: [1, {"name": "alex"}, 444], 8: [1, {"name": "alex"}, 444] } { 6: [1, {"name": "alex"}, 444], 7: [1, {"name": "alex"}, 444], 8: [1, {"name": "alex"}, 444] } 注意,在这个操作中,由于 dict.fromkeys() 方法创建的字典中每个键都引用同一个列表对象 [1, {"name": "alex"}, 444],因此当修改其中一个键对应的列表时,其他键对应的列表也会随之改变。这是因为它们实际上引用的是同一个对象。 如果希望每个键引用不同的列表对象,可以考虑使用以下方式创建 c: c = {key: [1, {"name": "alex"}, 444] for key in [6, 7, 8]} c = {key: [1, {"name": "alex"}, 444] for key in [6, 7, 8]} 这样每个键的值都是一个新的列表对象,而不是共享同一个列表对象,指定的值实际上是同一个对象的引用。当您修改其中一个键对应的值时,因为其他键对应的值与之相同,所以会看到它们也发生了变化。 如果您希望每个键引用不同的列表对象,可以使用以下方式创建 c: keys = [6, 7, 8] values = [1, {"name": "alex"}, 444] c = {key: list(value) for key in keys} keys = [6, 7, 8] values = [1, {"name": "alex"}, 444] c = {key: list(value) for key in keys} 这样每个键的值都是一个新的列表对象,而不是共享同一个列表对象。 以下是修正后的代码示例: keys = [6, 7, 8] values = [1, {"name": "alex"}, 444] c = {key: list(value) for key in keys} print(c) c[7][1]['name'] = "Jack Chen" print(c) # 输出: {6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'alex'}, 444]} keys = [6, 7, 8] values = [1, {"name": "alex"}, 444] c = {key: list(value) for key in keys} print(c) c[7][1]['name'] = "Jack Chen" print(c) # 输出: {6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'alex'}, 444]}
案例,叫三级查询,程序运行时,先列出要查询省份名称,然后用户输出省的名称和编号进行相询,如果输入某个省的编号或省份名称,系统就列表这个省下面所有市的序号和名称 ,然后提示请输入你要查那个市 ,列出市下面所有县的编号和名称,用户可以查某一个市所有的县。在任意菜单都 可以按Q退程序,按E 返回一上级。如果没有上级则不显示,返回一级。
data = { "1": {"name": "浙江省", "cities": { "1": {"name": "杭州市", "counties": { "1": "西湖区", "2": "上城区", "3": "下城区" }}, "2": {"name": "温州市", "counties": { "1": "鹿城区", "2": "龙湾区", "3": "瓯海区" }} }}, "2": {"name": "江苏省", "cities": { "1": {"name": "南京市", "counties": { "1": "玄武区", "2": "白下区", "3": "秦淮区" }}, "2": {"name": "苏州市", "counties": { "1": "姑苏区", "2": "虎丘区", "3": "吴中区" }} }} } # 查询数据的函数,根据级别和代码查询省、市、县信息 def query_data(data, level, code=None): # 无限循环,直到用户输入"q"退出程序 while True: # 如果有传入代码,则根据代码获取对应数据,否则使用初始数据 if code: current_data = data[code] else: current_data = data # 打印提示用户选择省、市或县 print("请选择{}:".format(level)) # 遍历当前数据的键值对,打印编号和名称 for key, value in current_data.items(): print("{}: {}".format(key, value["name"])) # 接收用户输入,可以是编号、名称,"q"退出,或者"e"返回上一级 user_input = input("请输入编号或名称,按Q退出,按E返回上一级:") # 如果用户输入为"q",退出程序 if user_input.lower() == "q": break # 如果用户输入为"e"且当前级别不是省,返回上一级 elif user_input.lower() == "e" and level != "省": return # 如果用户输入在当前数据中 elif user_input in current_data: # 如果当前级别是省,调用query_data函数查询市的数据 if level == "省": query_data(current_data[user_input]["cities"], "市", "cities") # 如果当前级别是市,调用query_data函数查询县的数据 elif level == "市": query_data(current_data[user_input]["counties"], "县", "counties") # 开始进行省份查询 query_data(data, "省")