python Ai 应用开发基础训练,字符串,字典,文件

法师-谢双元 / 2024-03-10 / 原文

--------------------------------------    编程能是大模型应用的天花板..................................................................

所以要好好将大模型应用在企业一定要好好练好最看不起的一环,基础能力字符串处理  本文档来自老男孩培训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]}
在Python中,使用 ​for i in data​遍历字典时,​i​表示的是字典的键(key),而不是键值对。这是因为字典是由键值对组成的数据结构,而在遍历时,默认情况下只遍历字典的键。如果你想同时访问键和值,
可以使用 ​data.items()​方法来遍历字典的键值对,例如:
data = {"key1": "value1", "key2": "value2", "key3": "value3"} # 遍历键值对 for key, value in data.items(): print(key, value) data = {"key1": "value1", "key2": "value2", "key3": "value3"} # 遍历键值对 for key, value in data.items(): print(key, value) ​ 输出结果: key1 value1 key2 value2 key3 value3 key1 value1 key2 value2 key3 value3

  

 案例,叫三级查询,程序运行时,先列出要查询省份名称,然后用户输出省的名称和编号进行相询,如果输入某个省的编号或省份名称,系统就列表这个省下面所有市的序号和名称 ,然后提示请输入你要查那个市 ,列出市下面所有县的编号和名称,用户可以查某一个市所有的县。在任意菜单都 可以按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": "吴中区"
        }}
    }}
}

# 显示省份列表
print("省份列表:")
for key, value in data.items():
    print("{}: {}".format(key, value["name"]))

# 用户选择省份
province_choice = input("请输入省份名称或编号进行查询:")
if province_choice.lower() == "q":
    exit()
elif province_choice.lower() == "e":
    exit()

# 根据用户选择的省份获取市信息
cities = data[province_choice]["cities"]
print("\n{} 下的市列表:".format(data[province_choice]["name"]))
for key, value in cities.items():
    print("{}: {}".format(key, value["name"]))

# 用户选择市
city_choice = input("请输入市编号进行查询,按Q退出,按E返回上一级:")
if city_choice.lower() == "q":
    exit()
elif city_choice.lower() == "e":
    exit()

# 根据用户选择的市获取县信息
counties = cities[city_choice]["counties"]
print("\n{} 下的县列表:".format(cities[city_choice]["name"]))
for key, value in counties.items():
    print("{}: {}".format(key, value))

 不同的格式和不同的思路

  

# 作者信息
__author__ = "www.51"

# 多级城市县镇村的字典数据
data = {
    '北京':{  # 北京作为一级键
        "昌平":{  # 昌平作为二级键
            "沙河":["oldboy","test"],  # 沙河作为三级键,值为列表
            "天通苑":["链家地产","我爱我家"]  # 天通苑作为三级键,值为列表
        },
        "朝阳":{  # 朝阳作为二级键
            "望京":["奔驰","陌陌"],  # 望京作为三级键,值为列表
            "国贸":{"CICC","HP"},  # 国贸作为三级键,值为集合
            "东直门":{"Advent","飞信"},  # 东直门作为三级键,值为集合
        },
        "海淀":{},  # 海淀作为二级键,值为空字典
    },
    '山东':{
        "德州":{},  # 德州作为二级键,值为空字典
        "青岛":{},  # 青岛作为二级键,值为空字典
        "济南":{}  # 济南作为二级键,值为空字典
    },
    '广东':{
        "东莞":{},  # 东莞作为二级键,值为空字典
        "常熟":{},  # 常熟作为二级键,值为空字典
        "佛山":{},  # 佛山作为二级键,值为空字典
    },
}

# 退出标志
exit_flag = False

# 主循环,根据用户输入不断展示相应的数据
while not exit_flag:
    for i in data:  # 遍历一级键
        print(i)  # 打印一级键
    choice = input("选择进入1>>:")  # 用户选择一级键
    if choice in data:  # 判断用户输入是否为一级键
        while not exit_flag:  # 进入二级键选择循环
            for i2 in data[choice]:  # 遍历二级键
                print("\t",i2)  # 打印二级键
            choice2 = input("选择进入2>>:")  # 用户选择二级键
            if choice2 in data[choice]:  # 判断用户输入是否为二级键
                while not exit_flag:  # 进入三级键选择循环
                    for i3 in data[choice][choice2]:  # 遍历三级键
                        print("\t\t", i3)  # 打印三级键
                    choice3 = input("选择进入3>>:")  # 用户选择三级键
                    if choice3 in data[choice][choice2]:  # 判断用户输入是否为三级键
                        for i4 in data[choice][choice2][choice3]:  # 遍历四级键(值)
                            print("\t\t",i4)  # 打印四级键(值)
                        choice4 = input("最后一层,按b返回>>:")  # 提示用户输入
                        if choice4 == "b":  # 如果用户输入b
                            pass  # 继续下一个循环
                        elif choice4 == "q":  # 如果用户输入q
                            exit_flag = True  # 设置退出标志为True
                    if choice3 == "b":  # 如果用户输入b
                        break  # 退出当前循环,返回上一级
                    elif choice3 == "q":  # 如果用户输入q
                        exit_flag = True  # 设置退出标志为True
            if choice2 == "b":  # 如果用户输入b
                break  # 退出当前循环,返回上一级
            elif choice2 == "q":  # 如果用户输入q
                exit_flag = True  # 设置退出标志为True

  

简化理解版本:

 

# 打开文件
file = open('file.txt', 'r')

# 读取文件内容
content = file.read()
print(content)

# 关闭文件
file.close()
​
逐行读取文件
# 打开文件
file = open('file.txt', 'r')

# 逐行读取文件内容
for line in file:
    print(line)

# 关闭文件
file.close()
# 打开文件
file = open('file.txt', 'r')

# 逐行读取文件内容
for line in file:
    print(line)

# 关闭文件
file.close()
​
写入文件
# 打开文件(如果文件不存在则会创建)
file = open('new_file.txt', 'w')

# 写入内容到文件
file.write('Hello, World!')

# 关闭文件
file.close()
# 打开文件(如果文件不存在则会创建)
file = open('new_file.txt', 'w')

# 写入内容到文件
file.write('Hello, World!')

# 关闭文件
file.close()
​
追加内容到文件
# 打开文件
file = open('existing_file.txt', 'a')

# 追加内容到文件
file.write('\nAppending new content.')

# 关闭文件
file.close()
# 打开文件
file = open('existing_file.txt', 'a')

# 追加内容到文件
file.write('\nAppending new content.')

# 关闭文件
file.close()