欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习Python(6)Python字符串类型&编码,解码,ASCII码&歌词解析器

程序员文章站 2022-03-11 22:59:01
目录学习Python(6)Python字符串类型概述格式化输出常用转义字符字符串基本功能字符串方法学习Python(6)Python字符串类型概述由多个字母,数字,特殊字符组成的有限序列在Python中,使用单引号或者双引号都可以表示字符串注意:没有单符号的数据类型‘a’ “a”格式化输出常用转义字符通过\来改变后面字母或者特殊字符的含义\t 相当于tab键\n相当于enter键\b相当于backspace字符串基本功能创建字符串s = 'hello Lily...

学习Python(6)Python字符串类型&编码,解码,ASCII码&歌词解析器

概述

由多个字母,数字,特殊字符组成的有限序列
在Python中,使用单引号或者双引号都可以表示字符串
注意:没有单符号的数据类型
‘a’ “a”

常用转义字符

通过\来改变后面字母或者特殊字符的含义

\t  	相当于tab键
\n		相当于enter键
\b		相当于backspace

字符串基本功能

创建字符串

s = 'hello Lily'

长度

print(len(s))  # 10

索引

print(s[0])
print(s[1])
print(s[-1])

切片

print(s[6:])
print(s[4:7])
print(s[::-1])  # 'yliL olleh'

拼接

print("亲" + "我")

重复

print("给个好评!" * 3)

成员

print("a good" in "today is a good day!")  # True

遍历

s = "hello"
for c in s:
    print(c)  # 每个字符

for i in range(len(s)):
    print(i, s[i])  # 下标

for i,c in enumerate(s):
    print(i, c)  # 下标,字符

字符串是不可变

s = "hello"
# s[0] = "a"  # 报错
s = s + " world"
print(s)  # 'hello world'

字符串方法

count(): 子字符串出现的次数

s = "hello"
print(s.count('ll'))

大小写

print("hello".upper())  # 变成大写
print("HELLo1".lower())  # 变成小写
print("i loVE you".title())  # 每个单词首字母大写,其他变成小写
print("i loVE you".capitalize())  # 整个字符串首字母大写,其他变成小写
print("i loVE you".swapcase())  # 大小写切换

判断

print('1'.isdigit())  # 是否数字
print('abc'.isalpha())  # 是否字母
print('abc123'.isalnum())  # 是否字母或数字
print("abc123,".islower())  # 是否小写
print("ABC123,".isupper())  # 是否大写
print("Hello".istitle())  # 是否是title格式
print('   '.isspace())  # 是否只有空格

查找
find() : 从左往右查找子字符串第一次出现的下标, 如果不存在则返回-1
rfind() : 从右往左查找子字符串第一次出现的下标, 如果不存在则返回-1

s = '* driver diagnosed'
print(s.find('ong'))  # 1
print(s.find('ong2'))  # -1
print(s.rfind('ong'))  # 6
print(s.rfind('ong2'))  # -1

下面的不常用

print(s.index('ong'))  # 1
print(s.index('ong2'))  # 报错
print(s.rindex('ong'))  # 6
print(s.rindex('ong2'))  # 报错

拆分/分割
split(): 按照指定的字符串进行拆分,返回一个拆分之后的列表

s = "I love   you"
list1 = s.split()  # ['I', 'love', 'you']
list1 = s.split(" ")  # ['I', 'love', '', '', 'you']
list1 = s.split("love")  # ['I ', '   you']
list1 = s.split('hello')  # ['I love   you']
list1 = s.split('you')  # ['I love   ', '']
list1 = s.split('o', 1)  # ['I l', 've   you'], 按照前1个o来拆分
print(list1)

splitlines() : 按行拆分

s = '''论语
学而不思则罔
思而不学则殆
有朋自远方来
不亦乐乎
'''
print(s.splitlines())  # ['论语', '学而不思则罔', '思而不学则殆', '有朋自远方来', '不亦乐乎']
print(s.splitlines(True))  # ['论语\n', '学而不思则罔\n', '思而不学则殆\n', '有朋自远方来\n', '不亦乐乎\n']
print(s.split('\n'))  # ['论语', '学而不思则罔', '思而不学则殆', '有朋自远方来', '不亦乐乎', '']

合并
join() : 将列表中的所有字符串用指定的连接字符串合并

l = ['论语', '学而不思则罔', '思而不学则殆', '有朋自远方来', '不亦乐乎']
print( '+'.join(l) )
print( '\n'.join(l) )
print( '===='.join(l) )
# print( '+'.join([1,2,3]) )  # 报错

替换

s = 'mask have tesla tesla tesla'
s = s.replace('mask', '王传福')
print( s.replace('tesla', 'BYD') )  # 王传福 have BYD BYD BYD
print( s.replace('tesla', 'BYD', 2) )  # 王传福 have BYD BYD tesla
print(s)  # 王传福 have tesla tesla tesla

首尾匹配

s = 'hello kitty'
print(s.startswith('hell'))  # True
print(s.endswith('tty'))  # True

去除两边的指定字符: 了解

print('   hello   你好   '.strip())  # 'hello   你好'
print('----贾---玲----'.strip('-'))  # '贾---玲'
print('----贾---玲----'.lstrip('-'))  # '贾---玲----'
print('----贾---玲----'.rstrip('-'))  # '----贾---玲'

# 了解
print('沈腾'.center(60))  # 居中打印
print('沈腾'.center(60, '-'))
print('沈腾'.ljust(60, '-'))
print('沈腾'.rjust(60, '-'))
print('沈腾'.zfill(60))  # 靠右,其他0填充

eval(): 将字符串中的内容运算

print(eval("1+2"))  # 3
l = eval("[1,2,3]")
# l = list("[1,2,3]")
print(l, type(l))  # list

# a, b = eval( input(":") )
# print(a, b)

简单加密

trans = str.maketrans("abc", "123")
print("I am a cool boy".translate(trans))
# 'I 1m 1 3ool 2oy'

编码&解码&ASCII码

编码

编码: 字符串=>二进制

s = "Python 牛!"
b = s.encode()  # 默认UTF-8编码, b'Python \xe7\x89\x9b!'
# b = s.encode('utf-8')
# b = s.encode('GBK')
print(b)

解码

解码: 二进制=>字符串

s2 = b.decode()
print(s2)  # 'Python 牛!'

ASCII码转换

print(ord('a'))  # 97
print(chr(100))  # d

歌词解析器

按照歌词时间,每隔1秒显示下句歌词
time.sleep(1) # 暂停1秒

1, 按行拆分, 得到每一行歌词, 如:lineStr = '[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼'
2, 将每一行歌词按照']'拆分,得到列表,
  如 lineList = ['[04:40.75', '[02:39.90', '[00:36.25', '只是因为在人群中多看了你一眼']
3,  将歌词内容, 和歌词时间分别取出, 可以使用字典来保存歌词时间和对应的歌词内容
          lrcDict = {}
  歌词内容 lrcContent = lineList.pop()  # '只是因为在人群中多看了你一眼'
          lineList变成: ['[04:40.75', '[02:39.90', '[00:36.25']
  歌词时间 for lrcTime in lineList:
              lrcTime2 = lrcTime[1:]
              lrcDict[lrcTime2] = lrcContent

      # 歌词内容就会按以下方式存储
      # lrcDict = {'04:40.75': '只是因为在人群中多看了你一眼',
                   '02:39.90': '只是因为在人群中多看了你一眼',
                   '00:36.25': '只是因为在人群中多看了你一眼'
                  }

      注意歌词时间需要转换成秒,如:lrcDict[lrcTime] = lrcContent

4, 将lrcDict中的lrcTime全部取出存放在列表中,将列表升序排序,
5,最后遍历列表, 每隔1秒 按照歌词的时间取出对应的歌词内容
musicLrcStr = """[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
"""
# 先将所有的时间和歌词放在列表中

# 按行拆分
lrc_list = musicLrcStr.splitlines()
# print(lrc_list)


# 列表存放所有时间和歌词
# music_list = [{'time': '00:22:33', 'content':''}]
music_list = []

# 遍历每一行歌词
for lrc in lrc_list:
    # print(lrc)  # 其中的每一行歌词内容

    # 按']'拆分
    line_list = lrc.split(']')
    # print(line_list)

    # 歌词内容
    lrc_content = line_list.pop()
    # print(line_list)

    # 遍历每一行的所有歌词时间
    for lrc_time in line_list:
        lrc_time = lrc_time[1:]  # 将'['去掉
        # print(lrc_time)

        music_dict = {'time': lrc_time, 'content': lrc_content}
        music_list.append(music_dict)

# print(music_list)
# [{'time': '00:03.50', 'content': '传奇'}, {'time': '00:19.10', 'content': '作词:刘兵 作曲:李健'}, {'time': '00:20.60', 'content': '演唱:王菲'}, {'time': '00:26.60', 'content': ''}, {'time': '04:40.75', 'content': '只是因为在人群中多看了你一眼'}, {'time': '02:39.90', 'content': '只是因为在人群中多看了你一眼'}, {'time': '00:36.25', 'content': '只是因为在人群中多看了你一眼'}, {'time': '04:49.00', 'content': ''}, {'time': '02:47.44', 'content': '再也没能忘掉你容颜'}, {'time': '00:43.69', 'content': '再也没能忘掉你容颜'}, {'time': '02:54.83', 'content': '梦想着偶然能有一天再相见'}, {'time': '00:51.24', 'content': '梦想着偶然能有一天再相见'}, {'time': '03:02.32', 'content': '从此我开始孤单思念'}, {'time': '00:58.75', 'content': '从此我开始孤单思念'}, {'time': '03:08.15', 'content': ''}, {'time': '01:04.30', 'content': ''}, {'time': '03:09.35', 'content': '想你时你在天边'}, {'time': '01:05.50', 'content': '想你时你在天边'}, {'time': '03:16.90', 'content': '想你时你在眼前'}, {'time': '01:13.13', 'content': '想你时你在眼前'}, {'time': '03:24.42', 'content': '想你时你在脑海'}, {'time': '01:20.92', 'content': '想你时你在脑海'}, {'time': '03:31.85', 'content': '想你时你在心田'}, {'time': '01:28.44', 'content': '想你时你在心田'}, {'time': '03:38.67', 'content': ''}, {'time': '01:35.05', 'content': ''}, {'time': '04:09.96', 'content': '宁愿相信我们前世有约'}, {'time': '03:39.87', 'content': '宁愿相信我们前世有约'}, {'time': '01:36.25', 'content': '宁愿相信我们前世有约'}, {'time': '04:16.37', 'content': '今生的爱情故事 不会再改变'}, {'time': '03:46.38', 'content': '今生的爱情故事 不会再改变'}, {'time': '01:42.47', 'content': '今生的爱情故事 不会再改变'}, {'time': '04:24.82', 'content': '宁愿用这一生等你发现'}, {'time': '03:54.83', 'content': '宁愿用这一生等你发现'}, {'time': '01:51.18', 'content': '宁愿用这一生等你发现'}, {'time': '04:31.38', 'content': '我一直在你身旁 从未走远'}, {'time': '04:01.40', 'content': '我一直在你身旁 从未走远'}, {'time': '01:57.43', 'content': '我一直在你身旁 从未走远'}, {'time': '04:39.55', 'content': ''}, {'time': '04:09.00', 'content': ''}, {'time': '02:07.85', 'content': ''}]

# 升序
music_list.sort(key=lambda a:a['time'])

# for d in music_list:
#     print(d)


import time

# for d in music_list:
#     print(f'{d["time"]} : {d["content"]}')
#     time.sleep(1)  # 暂停1秒

sec = 0
for d in music_list:
    t = d['time']
    i = t.find(':')
    t2 = float(t[:i])*60 + float(t[i+1:])  # 秒

    time.sleep(t2 - sec)  # 暂停
    sec = t2

    print(f'{d["time"]} : {d["content"]}')

本文地址:https://blog.csdn.net/qq_43284558/article/details/107645183