热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python字典编码_Python列表,字典,元组,字符串操作,文件操作,字符编码

1.列表操作1.1列表的定义:names[wangjing,wangjun,hashiqi]names[0]wangjing1.2切片&

1. 列表操作

1.1 列表的定义:

names = ["wangjing", "wangjun", "hashiqi"]

names[0]= "wangjing" ...

1.2 切片:取多个元素

names[1:3] #包含左边,不包含右边

names[-1] #列表中的最后一个元素

names[-3:] #取列表的最后三个元素

names[0:3]=names[:3] #取列表的前三个元素

1.3 追加

names.append('xiaojingzi') #在列表的最后插入一个元素

1.4 插入

names.insert(1, 'liuyumao') #插入一个元素,第一个参数为在列表中插入的位置

1.5 修改

names[2] = 'weichong' #将列表的第三个元素修改

1.6 删除

names.remove('weichong') #删除列表中'weichong'的元素

names.pop(1) #删除列表中第二个元素,并返回

del names[1] #第三种方法

1.7 扩展

names2 = [1, 2, 3, 4]

names.extend(names2)#['#jjkj', '4djisd', 'hashiqi', 'wangjing', 'wangjun', 1, 2, 3, 4]

1.8 copy

#浅copy的三种形式

p1 =copy.copy(person)

p2=person[:]

p3=list(person)#浅copy的用途,创建联合账号

person = ['name', ['saving', 100]]

p1=copy.copy(person)

p2=person[:]

p1[0]= 'ales'p2[0]= 'fengjia'p1[1][1] = 2000

print(p1)print(p2)#p1 p2 的saving都发生了变化

# 深copy的形式

names3 = copy.deepcopy(names)

1.9 统计

names=['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]

names.count("Amy") #2

1.10 排序

names.sort() #特殊字符,数字,大写字母,小写字母,不同的数据类型不能够放在一起排序,报错

1.11 反转

names.reverse() #反转

1.12 获取下标

names.index('xiaojingzi') #获取下标

2 元组

元组和列表差不多,只是一旦创建,便不能修改

names = ("alex","jack","eric")

names.count('alex') #统计元素的个数

names.index('ales') #获取元素的索引

3 字符串操作

name = 'My \t name is {name} and i am {years} old'

print(name.capitalize()) #首字母大写,不改变原来的字符串

print(name.count('a')) #统计字符的个数

print(name.center(50, '-')) #name居中,不够的使用-补齐

print(name.endswith('ax')) #判断字符串是否是以某某结尾

print(name.expandtabs(tabsize=30)) #扩展tab键

print(name.find('l')) #查找字符

print(name[3:]) #字符串的切片

print(name.format(name='alex', years=20)) #format的格式

print(name.format_map({'name': 'laex', 'years': 12})) #字典

print('avc278'.isalnum()) #只包含英文字符和数字

print('abA'.isalpha()) #纯英文字符

print('1A'.isdecimal()) #是否是十进制

print('232'.isdigit()) #判断是否是数字

print('True'.isidentifier()) #判断是否是合法的标识符

print('a A'.islower()) #判断是不是小写

print('33.3'.isnumeric()) #判断是不是数字

print(' '.isspace()) #判断是不是空格

print('My Name Is'.istitle()) #判断是不是标题,每个字母开头必须大写

print('My Name Is'.isprintable()) #判断是否能够打印

print('My Name Is'.isupper()) #判断是否是大写

print([''.join(['1', '2', '3'])]) #字符拼接成字符串

print(name.ljust(50, '*').format(name='wangjing', years=20)) #保证最小长度为50,不够长度在最右边补*

print(name.rjust(50, '-').format(name='wangjing', years=20)) #保证最小长度为50,不够长度在最左边补-

print('Ales'.lower()) #字符串全部转换成小写

print('Ales'.upper()) #字符串全部转换成大写

print('\nAlex\n'.lstrip()) #去掉左边的空格和回车

print('\nAlex\n'.rstrip()) #去掉右边的空格和回车

print('\nAlex\n'.strip()) #同时去掉左边和右边的回车以及换行

p = str.maketrans('abcdef', '123456') #将abcdef 分别用123456来代替

print('alex li'.translate(p)) #使用P的代替规则来改写字符串

print('alesl'.replace('l', 'L', 1)) #将原字符串中的内容使用新的字符来代替,1代表代替其中的几个字符

print('alesl'.rfind('8')) #从左往右查找返回靠右侧的所查找的字符的索引,查找不到返回-1

print('alex lil'.split('l')) #将字符串按照空格(默认)分割

print('alex\n lil'.splitlines()) #将字符串按照换行分割

print('alex li'.swapcase()) #字符全部转换成大写

print('ales li'.title()) #字符转换成标题输出,每个单词大写

print('lex li'.zfill(50)) #不够用0填充

4 字典操作

4.1 字典的语法

info ={'stu1101': 'TengLan Wu','stu1102': 'LongZe Luola','stu1103': 'XizoZe Maliya'}

字典的特性:

字典是无序的并且关键字必须是唯一的

4.2 增加

info['stu1104'] = 'CangjingKong' #字典增加

4.3 修改

info['stu1101'] = '武藤兰' #字典修改

4.4 删除

del info['stu1101'] #字典删除

info.pop('stu1102') #字典删除

info.popitem() #随机删除一个

4.5 字典查询

info.get('stu1103') #安全获取,没有的话返回none

info['stu1101']

4.6 字典合并

b ={'stu1104': 'xiaojignzi','stu1106': 'xiaojunzi'}

info.update(b)#两个字典合并,如果info中有的元素,则修改,如果没有,则添加

4.7 字典转换成列表

print(info.items()) #字典转换成列表

4.8 字典的初始化

c = dict.fromkeys([6, 7, 8], [1, {'name': 'alex'}, 444]) #初始化字典

c[7][1]['name'] = 'Jack' #注意:三个占用同一个内存,一个修改全部修改#{8: [1, {'name': 'Jack'}, 444], 6: [1, {'name': 'Jack'}, 444], 7: [1, {'name': 'Jack'}, 444]}

4.9 判断是否在字典中

'stu1103' in info

4.10 字典中有该元素不做操作,没有则添加

info.setdefault('stu1103', 'baiduyun') #如果没有该元素,则添加,有则不做操作

4.11 字典的遍历

for i in info: #字典的循环,i返回字典的索引,速度快,推荐

print(i, info[i])for k, v in info.items(): #第二种方法,不推荐

print(k, v)

5. 购物车实例

product_list =[

('iphone', 5800),

('mac', 9800),

('Bike', 800),

('Watch', 10600),

('coffee', 31),

('alex python', 120),

]

shopping_list=[]

salary= input("Input your salary:")ifsalary.isdigit():

salary=int(salary)whileTrue:for index, item inenumerate(product_list):print(index, item)

user_choice= input("选择要买嘛?>>>:")ifuser_choice.isdigit():

user_choice=int(user_choice)if user_choice =0:

p_item&#61;product_list[user_choice]if p_item[1] <&#61;salary:

shopping_list.append(p_item)

salary&#61; salary - p_item[1]print("Add %s into shopping cart, your current balance is %d" %(p_item, salary))else:print(&#39;033[41;lm你的余额只剩下[%s]啦&#xff0c;还没个毛线\033[Om&#39; %salary)else:print(&#39;product code [%s] is not exitst!&#39; %user_choice)elif user_choice &#61;&#61; &#39;q&#39;:print(&#39;-------shopping list---------&#39;)for p inshopping_list:print(p)print("your current balance:", salary)

exit()else:print(&#39;invalid option&#39;)

6. 三级菜单实例

data &#61;{&#39;北京&#39;: {&#39;昌平&#39;: {&#39;沙河&#39;: [&#39;lodboy&#39;, &#39;test&#39;],&#39;天通苑&#39;: [&#39;链家地产&#39;, &#39;我爱我家&#39;],

},&#39;朝阳&#39;: {&#39;望京&#39;: [&#39;奔驰&#39;, &#39;陌陌&#39;],&#39;国贸&#39;: [&#39;CICC&#39;, &#39;HP&#39;],&#39;动直门&#39;: [&#39;Advent&#39;, &#39;飞信&#39;],

},&#39;海定&#39;: {

},

},&#39;山东&#39;: {&#39;德州&#39;: {},&#39;青岛&#39;: {},&#39;济南&#39;: {},

},&#39;广东&#39;: {&#39;东莞&#39;: {},

}

}

exit_flag&#61;Falsewhile notexit_flag:for i indata:print(i)

choice&#61; input(&#39;选择进入1>>&#39;)if choice indata:while notexit_flag:for i2 indata[choice]:print(&#39;\t&#39;, i2)

choice2&#61; input(&#39;选择进入2>>&#39;)if choice2 indata[choice]:while notexit_flag:for i3 indata[choice][choice2]:print(&#39;\t&#39;, i3)

choice3&#61; input(&#39;选择进入3>>&#39;)if choice3 indata[choice][choice2]:for i4 indata[choice][choice2][choice3]:print(&#39;\t\t&#39;, i4)

choice4&#61; input(&#39;最后一层&#39;)if choice4 &#61;&#61; &#39;b&#39;:pass #什么都不做

elif choice4 &#61;&#61; &#39;q&#39;:

exit_flag&#61;Trueelif choice3 &#61;&#61; &#39;b&#39;:break

elif choice3 &#61;&#61; &#39;q&#39;:

exit_flag&#61;Trueelif choice2 &#61;&#61; &#39;b&#39;:break

elif choice2 &#61;&#61; &#39;q&#39;:

exit_flag&#61;Trueelif choice &#61;&#61; &#39;b&#39;:break

elif choice &#61;&#61; &#39;q&#39;:

exit_flag&#61; True

7 文件操作

7.1 文件操作的基本流程

打开文件&#xff0c;得到文件句柄并赋值给一个变量

通过句柄对文件进行操作

关闭文件

#第一种方法&#xff0c;需要自行关闭文件

f &#61; open(&#39;yesterday&#39;, &#39;r&#43;&#39;, encoding&#61;&#39;utf-8&#39;)

f.close()#第二种方法&#xff0c;自动关闭文件&#xff0c;也可以同时打开多个文件

with open(&#39;log&#39;,&#39;r&#39;) as f:

7.2 打开文件的模式

r&#xff0c;只读模式&#xff08;默认&#xff09;。

w&#xff0c;只写模式。【不可读&#xff1b;不存在则创建&#xff1b;存在则删除内容&#xff1b;】

a&#xff0c;追加模式。【可读&#xff1b; 不存在则创建&#xff1b;存在则只追加内容&#xff1b;】"&#43;"表示可以同时读写某个文件

r&#43;&#xff0c;可读写文件。【可读&#xff1b;可写&#xff1b;可追加】从光标所在的位置写入&#xff0c;会覆盖以前的内容&#xff0c;如果想追加&#xff0c;则将光标移动到末尾

w&#43;&#xff0c;写读&#xff0c;写的时候会覆盖原来的所有内容

a&#43;&#xff0c;同a"U"表示在读取时&#xff0c;可以将 \r \n \r\n自动转换成 \n &#xff08;与 r 或 r&#43;模式同使用&#xff09;

rU

r&#43;U"b"表示处理二进制文件&#xff08;如&#xff1a;FTP发送上传ISO镜像文件&#xff0c;linux可忽略&#xff0c;windows处理二进制文件时需标注&#xff09;

rb

wb

ab

7.3 文件函数

f.seek(10) #将文件的光标指针定位到参数所在的位置&#xff0c;可以确定位置再写

f.tell() #返回当前文件光标指针所在的位置

f.readline() #读取一行并返回

f.read(k) #指定参数时读取参数数目的内容&#xff0c;指针光标移动&#xff0c;不指定时读取整个文件的内容

f.encoding #返回文件的编码方式

f.flush() #刷新文件&#xff0c;马上写入&#xff0c;否则会等缓存区满才写入

#文件按行读取的两种方法&#xff1a;

for index, line in enumerate(f): #浪费系统内存的操作

for line in f: #推荐

#文件修改操作的实例

f &#61; open(&#39;yesterday&#39;, &#39;r&#39;, encoding&#61;&#39;utf-8&#39;)

f_new&#61; open(&#39;yesterday2.bak&#39;, &#39;w&#39;, encoding&#61;&#39;utf-8&#39;)for line inf:if &#39;肆意的快乐等我享受&#39; inline:

line&#61; line.replace(&#39;肆意的快乐等我享受&#39;, &#39;肆意的快乐等着小镜子去享受&#39;)

f_new.write(line)

8 字符编码与转码

参考&#xff1a;http://www.cnblogs.com/yuanchenqi/articles/5956943.html

如果py2解释器去执行一个utf8编码的文件&#xff0c;就会以默认地ASCII去解码utf8&#xff0c;一旦程序中有中文&#xff0c;自然就解码错误了&#xff0c;所以我们在文件开头位置声明 #coding:utf8&#xff0c;其实就是告诉解释器&#xff0c;你不要以默认的编码方式去解码这个文件&#xff0c;而是以utf8来解码。而py3的解释器因为默认utf8编码&#xff0c;所以就方便很多了。

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分&#xff0c;不再会对bytes字节串进行自动解码。文本总是Unicode&#xff0c;由str类型表示&#xff0c;二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes&#xff0c;正是这使得两者的区分特别清晰。你不能拼接字符串和字节包&#xff0c;也无法在字节包里搜索字符串&#xff08;反之亦然&#xff09;&#xff0c;也不能将字符串传入参数为字节包的函数&#xff08;反之亦然&#xff09;。

#print(&#39;alvin&#39;&#43;u&#39;yuan&#39;)#字节串和unicode连接 py2:alvinyuan

print(b&#39;alvin&#39;&#43;&#39;yuan&#39;)#字节串和unicode连接 py3:报错 can&#39;t concat bytes to str

如果py2解释器去执行一个utf8编码的文件&#xff0c;就会以默认地ASCII去解码utf8&#xff0c;一旦程序中有中文&#xff0c;自然就解码错误了&#xff0c;所以我们在文件开头位置声明 #coding:utf8&#xff0c;其实就是告诉解释器&#xff0c;你不要以默认的编码方式去解码这个文件&#xff0c;而是以utf8来解码。而py3的解释器因为默认utf8编码&#xff0c;所以就方便很多了。

注意&#xff1a;

1. 在py3中encode,在转码的同时还会把string 变成bytes类型&#xff0c;decode在解码的同时还会把bytes变回string

2. 创建一个txt文件时&#xff0c;win的操作系统安装时是默认的gbk编码&#xff0c;而linux操作系统默认的是utf8编码

1452657-20180731171431162-1689703667.png

9. 编码解码的常见问题

1 cmd下的乱码问题

hello.py

1

2

#coding:utf8

print (&#39;苑昊&#39;)

文件保存时的编码也为utf8。

思考&#xff1a;为什么在IDE下用2或3执行都没问题&#xff0c;在cmd.exe下3正确&#xff0c;2乱码呢&#xff1f;

我们在win下的终端即cmd.exe去执行&#xff0c;大家注意&#xff0c;cmd.exe本身也一个软件&#xff1b;当我们python2 hello.py时&#xff0c;python2解释器(默认ASCII编码)去按声明的utf8编码文件&#xff0c;而文件又是utf8保存的&#xff0c;所以没问题&#xff1b;问题出在当我们print&#39;苑昊&#39;时&#xff0c;解释器这边正常执行&#xff0c;也不会报错&#xff0c;只是print的内容会传递给cmd.exe用来显示&#xff0c;而在py2里这个内容就是utf8编码的字节数据&#xff0c;可这个软件默认的编码解码方式是GBK&#xff0c;所以cmd.exe用GBK的解码方式去解码utf8自然会乱码。

py3正确的原因是传递给cmd的是unicode数据&#xff0c;cmd.exe可以识别内容&#xff0c;所以显示没问题。

明白原理了&#xff0c;修改就有很多方式&#xff0c;比如&#xff1a;

1

print (u&#39;苑昊&#39;)

改成这样后&#xff0c;cmd下用2也不会有问题了。

2 open()中的编码问题

创建一个hello文本&#xff0c;保存成utf8&#xff1a;

苑昊&#xff0c;你最帅&#xff01;

同目录下创建一个index.py

f&#61;open(&#39;hello&#39;)

print(f.read())

为什么 在linux下&#xff0c;结果正常&#xff1a;苑昊&#xff0c;在win下&#xff0c;乱码&#xff1a;鑻戞槉&#xff08;py3解释器&#xff09;&#xff1f;

因为你的win的操作系统安装时是默认的gbk编码&#xff0c;而linux操作系统默认的是utf8编码&#xff1b;

当执行open函数时&#xff0c;调用的是操作系统打开文件&#xff0c;操作系统用默认的gbk编码去解码utf8的文件&#xff0c;自然乱码。

解决办法&#xff1a;

f&#61;open(&#39;hello&#39;,encoding&#61;&#39;utf8&#39;)

print(f.read())

如果你的文件保存的是gbk编码&#xff0c;在win 下就不用指定encoding了。

另外&#xff0c;如果你的win上不需要指定给操作系统encoding&#61;&#39;utf8&#39;&#xff0c;那就是你安装时就是默认的utf8编码或者已经通过命令修改成了utf8编码。

注意&#xff1a;open这个函数在py2里和py3中是不同的&#xff0c;py3中有了一个encoding&#xff1d;None参数。


推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 文件路径的生成及其在文件操作中的应用
    本文介绍了文件路径的生成方法及其在文件操作中的应用。在进行文件操作时,需要知道文件的具体位置才能打开文件。文件的位置有绝对路径和相对路径之分。绝对路径通常只在特定电脑上有效,不同电脑上的文件存放路径可能不同,导致程序报错。相对路径是解决这个问题的最好方式,它不依赖于文件的具体存放位置,只需要按照统一的规范进行文件存放即可。使用相对路径可以避免冗余和麻烦,特别适用于大项目和团队维护代码的情况。 ... [详细]
author-avatar
LoisWangol_326
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有