Python学习第六天——字符串、字典与文件

1. 字符串

定义:用', ", ''', """,引起来的连续字符串,只要为变量分配一个值即可,可以使用方括号来截取字符串

字符串一旦创建,将不可修改。一旦修改或者拼接,将会重新生成字符串。

练习1: 实现首字母大写,其他字母小写的功能

s[0].upper() + s[1:].lower()

练习2: 字符串倒序(不能用切片)

s = 'anzhihe'
l_str = list(s)
l_str.reverse()
print l_str
print ''.join(l_str)

ss = ''
for c in s:
    ss = c + ss

print ss

['e', 'h', 'i', 'h', 'z', 'n', 'a']
ehihzna
ehihzna

练习3: 截取字符串

src = 'anzhihe:18,chegva:2,hehe:3,haha:4'

rt_list = []

for user in src.split(','):
    name,age = user.split(':')
    rt_list.append((name,int(age)))

print rt_list

[('anzhihe', 18), ('chegva', 2), ('hehe', 3), ('haha', 4)]

                                              

2. 字典

存储有很多一一对应关系的信息(如账号密码)

  • 只是单纯的想把账号和密码联系起来,用list不太方便

  • 我们需要可以通过账号,直接找到密码

定义: 用大括号{}包含或dict定义,每个元素是由key,value组成key:value对,每个元素间通过逗号分隔,元素通过key访问(增[dict中没有存在的key],删,改[dict中有存在的key],查)。键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

>>> help(dict)
Help on class dict in module __builtin__:

class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)

  • Python 字典(Dictionary)

    for xxx in dict_name

    value => 任意类型

    key => 不可变的,字符串、数字、布尔、None、tuple

    dict可遍历,但无序

    k in d 检测字典里是否有k这个key,key不存在会报错

    del 删除元素

dict特点:

  • 查找速度非常快,1个元素,和10W的元素,查找速度基本一样

  • list查找速度随着数量增加而变慢

  • dict占用内存

  • dict是没有顺序的

  • dict的key是不可变的(list就不能当key)

  • key不能重复

练习4:实现dict copy功能

src_dict = {
    'a' : 1,
    'b' : 2,
    'c' : range(0, 10),
    'd' : {
        'name' : 'anzhihe',
        'age' : 18,
        'score' : 100
    }
}

dest_dict = {}

for key in src_dict:
    #key, src_dict[key]
    dest_dict[key] = src_dict[key]

print 'dest_dict: %s' % (dest_dict)

dest_dict2 = {}

for key,value in src_dict.items():
    dest_dict2[key] = value

print 'dest_dict2: %s' %(dest_dict2)


dest_dict3 = {}

dest_dict3 = dict(zip(src_dict.keys(), src_dict.values()))

print 'dest_dict3: %s' %(dict(zip(src_dict.keys(), src_dict.values())))

dest_dict: {'a': 1, 'c': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'b': 2, 'd': {'age': 18, 'score': 100, 'name': 'anzhihe'}}
dest_dict2: {'a': 1, 'c': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'b': 2, 'd': {'age': 18, 'score': 100, 'name': 'anzhihe'}}
dest_dict3: {'a': 1, 'c': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'b': 2, 'd': {'age': 18, 'score': 100, 'name': 'anzhihe'}}

练习5: 统计字符出现的次数

read_me = '''
first of all, i want make it clear that i can not claim understanding this holy book  in just a few weeks, and i would not dare comment on this sacred book, in addition, i don't think i can give you a full picture of the holy bible in just few words.i can not preach anything here. what i want to do here is to express my understanding by sharing two events described in this book. the fist story i want to share is abandoned tower of babel.according to the bibel,people use the same language to communicate with each other in ancient times.with the soaring vanity,they decided to build a heaven-reaching tower to show off their achievement, god knows, he change the human language into different kinds and make it difficult for people to communicate with each other,hence the failure of building tower of  babel.this story tells people,never do things in selfishness, but make a life out of enternal glory.the other story,before jesus christ was crucified,he said, father,forgive them, for they know not what they do. with great love, he shouldered all the sins of  people. what can we learn from this story?we live in this world thanks to the love of god, for this reanson, we should make our lives glorious to honor our god.finally,i want to sum up by saying that only if we put our lives in the eternal love of god,can we live a perfect life, and  what you appealed is what god expected!
'''

chars_dict = {}

for c in read_me:
    if c not in chars_dict:
        chars_dict[c] = 1
    else:
        chars_dict[c] += 1

print '第一种方法: %s' % (chars_dict)

for c in read_me:
    if not chars_dict.has_key(c):
        chars_dict[c] = 0

    chars_dict[c] += 1

print '第二种方法has_key:%s' % (chars_dict)

for c in read_me:
    chars_dict[c] = chars_dict.get(c, 0) + 1

print '第三种方法get:%s' % (chars_dict)


for c in read_me:
    chars_dict.setdefault(c,0)
    chars_dict[c] += 1

print '第四种方法setdefault: %s' % (chars_dict)

=================================
求排行前十位出现最多的字符   
for c in read_me:
    chars_dict[c] = chars_dict.get(c, 0) + 1

char_list = chars_dict.items() #转换成列表

for j in range(0, len(char_list) - 1):
    for i in range(0, len(char_list) - 1 - j):
        if char_list[i][1] > char_list[i + 1][1]:
            temp = char_list[i]
            char_list[i] = char_list[i + 1]
            char_list[i + 1] = temp

print char_list
print char_list[-1:-11:-1]

练习6: 学科分数统计

users = [
    {'name' : 'kk', 'score' : [61, 72, 80]},
    {'name' : 'kk2', 'score' : [52, 62, 60]},
    {'name' : 'kk3', 'score' : [43, 81, 64]},
    {'name' : 'kk4', 'score' : [64, 75, 65]},
    {'name' : 'kk5', 'score' : [75, 95, 66]},
    {'name' : 'kk6', 'score' : [82, 80, 72]},
    {'name' : 'kk7', 'score' : [61, 72, 90]},
    {'name' : 'kk8', 'score' : [82, 52, 73]},
    {'name' : 'kk9', 'score' : [73, 71, 74]},
    {'name' : 'kk10', 'score' : [64, 95, 85]},
    {'name' : 'kk11', 'score' : [65, 85, 66]},
    {'name' : 'kk12', 'score' : [92, 70, 82]},
]

scores = {}
for user in users:
    for i in range(0, 3):
        key = (i, user['score'][i] / 10)
        scores[key] = scores.get(key, 0) + 1


rt_list = []
class_names = {0 : 'math', 1 : 'chinese', 2 : 'english'}
for key, value in scores.items():
    #key = (课程, 分数区间)
    #value = 次数
    rt_list.append((class_names[key[0]], '%s0-%s9' % (key[1], key[1]), value))

print rt_list

[('english', '70-79', 3), ('english', '60-69', 5), ('english', '90-99', 1), ('chinese', '50-59', 1), ('english', '80-89', 3), ('math', '40-49', 1), ('math', '70-79', 2), ('math', '60-69', 5), ('chinese', '80-89', 3), ('math', '50-59', 1), ('chinese', '90-99', 2), ('chinese', '70-79', 5), ('math', '90-99', 1), ('chinese', '60-69', 1), ('math', '80-89', 2)]

练习7: 将dict中的key和value反转

temp_dict = {'teach':'pc','waihao':'pc','name':'pc','age':12,'job':'IT'}

rt_dict = {}
#{a : 1, b : 1, c :1}


for key, value in temp_dict.items():
    _rvalue = rt_dict.get(value)
    if _rvalue is None:
        rt_dict[value] = key
    elif isinstance(_rvalue, list):
        _rvalue.append(key)
    else:
        rt_dict[value] = [_rvalue, key]

print rt_dict

{'pc': ['teach', 'waihao', 'name'], 12: 'age', 'IT': 'job'}

                                                

3. 文件

1.文件路径

绝对路径和相对路径

绝对路径:/ c:/
相对路径:当前进程启动目录

2.文件操作

读/写

a. 找到文件 => 文件路径

b. 打开 => open(path, mode)

mode :r w a

c. 查看/修改(保存)

read(),readline(),readlines()

d. 关闭

close()

练习8: 编写配置文件模版

port = 8888
server = 'default'
servername = 'cmdb'
access_log = '/var/log/cmdb.log'
home = '/home/kk/www'
proxy_port = 9999

rh = open('D:\\python\\study\\week03\\nignx.tpl')
nginx_conf = rh.read().format(port=port, server=server, servername=servername, access_log=access_log, home=home, proxy_port=proxy_port)
rh.close()

handler = open('cmdb.conf', 'w')
handler.write(nginx_conf)
handler.close()


==============nignx.tpl===================

server {{
    listen       {port} {server};
    server_name  {servername};

    access_log  {access_log}  main;

    location / {{
        root   {home};
        index  index.html index.htm;
        proxy_pass   http://127.0.0.1:{proxy_port};
    }}
}}

==============cmdb.conf===================

server {
    listen       8888 default;
    server_name  cmdb;

    access_log  /var/log/cmdb.log  main;

    location / {
        root   /home/kk/www;
        index  index.html index.htm;
        proxy_pass   http://127.0.0.1:9999;
    }
}

anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/2463.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注