首页 > 代码库 > 平凡之路2:python基础知识(1)
平凡之路2:python基础知识(1)
本节内容
字符串操作
列表、元组操作
字典操作
文件操作
字符编码与转码
字符串操作:
字符串一般用单引号或者双引号引起来,而多行字符串,一般用三引号引起,然后再赋予变量。如果没有赋予变量,三引号则用来表示内部内容注释。
字符串属于不可改变的数据类型,即对字符串进行的各种操作,并不改变原本字符串,只是将修改后的字符串另行存储。
字符串可以可以进行索引和切片两种查询方式,其中索引即为字符串下标,从左往右,从零开始。顾名思义,索引指的是根据下标取一个字符,查询其内容,切片是查询夹在两个下表索引之间的一个或多个字符
>>>a=‘whatever‘>>>a[3]‘t‘>>>a[0,4]>>>‘what‘
字符串的常用内置方法:
str.count() #统计字符串中‘e’的个数:
‘whatever’.count(‘e‘)
str.center() # 使字符串居中显示,括号里的两个参数分别为两边填充的字符以及填充字符的数量,第一个参数为数字,第二个为用来填充的字符:
‘name_list‘.center(50,‘-‘)
str.startswith() # 判断是否以某段字符串开头,返回值是布尔值
‘whatever’.startswith(‘what‘)
‘Time is money.‘
‘{}’.format() # 格式化字符串就是将对应内容格式化到字符串中相应的{}中,format中的参数即为要格式化到字符串中的内容
‘{} is {}‘.format(‘Time‘,‘money‘)
str.find() #查找第一个子字符的索引位置
‘whatever‘.find(‘e‘)
str.lower() #将字符串中所有大写变成小写
‘My God‘.lower()
str.upper() #所有字符都变大写
‘My God‘.upper()
str.strip() #去掉字符串两边的空白,包括空格、制表符和换行等。
‘\tMy God\n‘.strip()
‘My God‘.replace(‘God‘,‘dog,1) #用新内容替换元字符里的内容,第一个参数为要替换的内容,第二个参数要用来替换的新内容,第三个参数为替换次数,即有多个相同字符串时,可以选择替换几个
‘My God‘.replace(‘God‘,‘dog‘,1)
‘My God dog‘.split(‘o‘,1)) #以某个内容为间隔,将字符串分成好几个字符串。第一个参数为要用来做分界的内容,第二个为分界次数。注意分界之后,用来分界的字符不在了,
‘My God dog‘.split(‘o‘,1)
列表/元组及其基本操作:
列表和元组都用来存储多个元素的数据。其中,列表用[]包括起来,每个元素之间用逗号分开,其元素可以为数字、字符串、元组、字典等。列表为可变数据类型,即所有操作都是在原列表上进行的。
a=["a",1,["b","c"],{"name":"Tony"}]
列表可以进行增、删、改、查等操作。
查:
查询功能分为切片查询和索引查询,原理和字符串的方式类似,都是根据列表中元素的下标进行标记的。
>>>a=["a",1,["b","c"],{"name":"Tony"}]>>>a[0]‘a‘>>>a[0:3]‘a‘,1,["b","c"]
除此之外,查询还包括统计列表元素数量以及查询元素下标:
>>>a=["a",1,["b","c"],{"name":"Tony"}]
>>>a.count(‘a‘)
1
>>>a.index(‘a‘)
0
增:
增加功能包括追加、插入、扩展等操作。追加append是将元素加到列表末尾,插入则可以插入到任何位置,扩展是将别的列表的元素加到原列表末尾。
>>>a=["a",1,["b","c"],{"name":"Tony"}]>>>a.append(‘d‘)>>>aa=["a",1,["b","c"],{"name":"Tony"},‘d‘]>>>a.insert(1,‘e‘)>>>aa=[‘a‘,"e",1,["b","c"],{"name":"Tony"},‘d‘]
>>>b=[1,2]
>>>a.extend(b)
>>>a
a=[‘a‘,"e",1,["b","c"],{"name":"Tony"},‘d‘,1,2]
删:
del可以通过索引进行删除,remove是通过元素值进行删除,pop是默认删除最后一个元素,并返回这个删除的值
>>>a=["a",1,["b","c"],{"name":"Tony"}]
>>>del a[0]
>>>a
a=[1,["b","c"],{"name":"Tony"}
>>>:a.remove(1)
>>>a
a=[["b","c"],{"name":"Tony"}]
>>>a.pop()
{"name":"Tony"}
>>>a
a=[["b","c"]]
改:
修改元素直接通过下标进行修改,
>>>a=["a",1,["b","c"],{"name":"Tony"}]
>>>a[0]=‘b‘
>>>a
a=[‘b‘‘a‘,1,["b","c"],{"name":"Tony"}
其他操作:
翻转reverse、排序sort
>>>a=["a",‘1‘,"b","c","name","Tony"]
>>>a.reverse()
>>>a
a=["Tony","name","c","b","1","a"]
>>>a.sort()
>>>a
a=[‘1‘,‘Tony‘,‘a‘,‘b‘,‘c‘,‘name‘]
元组和列表类似,用()扩起来,如果只有一个元素,需要在元素末尾加个逗号用以区别,例:(‘a‘,),但元组中的元素只能进行查询,不能做任何修改,属于只读列表。一般用来储存固定的数据,只用来调用即可。
字典操作:
在Python中。字典的元素是成对存储的,用dict表示,其中一个元素中分为key和value两部分,用冒号隔开,外边是用{}括起来的:
stu={‘name‘:‘xiaoming‘,‘age‘:12}
如上,冒号前边的为key值,相当于字典中的索引,如:‘name’和‘age’,同属于key。同一个字典中,key是唯一的,所以字典中的值依靠key值来进行查询,而且不存在索引,字典中的元素是随机存储的。作为数据,字典也可以分进行增删改查。
增:
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}>>>stu[‘job‘]="IT‘>>>stu{‘name‘:‘xiaoming‘,‘job‘:‘IT‘,‘age‘:12}
删:
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>stu.pop(‘name‘)
>>>stu
{‘age‘:12}
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>del stu(‘name‘)
>>>stu
{‘age‘:12}
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>stu.popitem() #此方法为随机删除
>>>stu
{‘age‘:12}
改:
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>stu(‘name‘)=‘xiaohong‘
>>>stu
{‘name‘:‘xiaohong‘,‘age‘:12}
查:
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>‘name‘ in stu #用来判定字典里有没有该key
True
>>>stu.get(‘name‘) #此方法如果字典中没有该key,返回空值,不报错
‘xiaoming‘
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>sut[‘name‘] #注意,此方法取value,如果key不存在,会报错
‘xiaoming‘
其他操作:
#setdefault
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12}
>>>stu.setdefault(‘job‘,‘IT‘) #如果key不存在,直接建立一对新键值,并返回值
‘IT‘
>>>stu
{‘name‘:‘xiaoming‘,‘age‘:12,‘job‘:‘IT‘} #如果key存在,不对数据进行操作,并返回原数据中该key下的值
>>>stu.setdefault(‘name‘,‘xiaohong‘)
‘xiaoming‘
>>>stu
{‘name‘:‘xiaoming‘,‘age‘:12,‘job‘:‘IT‘}
#fromkeys
>>>stu.fromkeys=([‘name‘,‘age‘],‘xiaoming‘) #此时的stu初始为空字典
>>>stu
{‘name’:‘xiaoming‘,‘age‘:‘xiaoming‘}
#values and #keys
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12} #虽然把值或者键取出来了,但注意此时返回的数据不是列表
>>>stu.values()
dict_values([‘xiaoming‘,12])
>>>stu.keys()
dict_keys([‘name‘,‘age‘])
#items
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12} #成对取出,同样注意取出的数据类型不是列表
>>>stu.items()
dict_items[(‘name‘,‘xiaoming‘),(‘age‘,12)]
#update
>>>stu={‘name‘:‘xiaoming‘,‘age‘:12} #和列表中的extend有些类似
>>>cla={‘class‘,5}
>>>stu.update(cla)
>>>stu
{‘name‘:‘xiaoming‘,‘age‘:12,‘class‘:5}
通过循环取出字典中的数据:
stu={‘name‘:‘xiaoming‘,‘age‘:12}
for i in stu: #循环输出的是stu的key,想取value可以通过stu[key]来实现
print(i)
for m,n in stu.item(): #会把dict转化成list格式,数据量大时勿用
print(m,n)
字典的嵌套:
字典的嵌套即为字典中元素也为字典,字典中元素为字典的时候,元素内的元素亦可为字典……想嵌套多少层都可以。
文件操作:
能调用方法的一定是对象,例如:list.append(),list即为对象,append为方法。
文件基本操作模式有3种:只读(r),只写(w),追加(a)。只读情况下不能做写和追加操作,只写和追加的情况下不能读取文件。
文件操作基本流程:1. 创建文件对象
2. 调用文件方法进行操作
3. 关闭文件
f.read(),是在r模式下进行的操作,对整个文件进行读取。
f.readline(),同样在r模式下操作,读取光标后的一行内容
f.readlines(),逐行读,输出的内容以列表存储,每个元素为每行的内容
f.write(),w模式下进行的操作,将内容写进文件里。但这里要注意的是,以w方式打开文件,会把原来文件中的内容覆盖掉,所以一般不用w方式打开,想添加内容可以用a模式打开。
f.append(),a模式下或者w模式下的操作,将内容添加到文件的末尾。
f=open(‘file_read‘,‘r‘) #如果文件存在,就读取文件,如果不存在,就新建文件。
f.read() #在read命令下,初始光标是在开头的,而read读取的是光标后边的内容
基本操作之外的几个操作:r+, w+, a+,
# r+:读写模式,读的时候光标默认在0位置,写的时候光标自动移到最后位置写
# w+:写读模式,先清空,再进行写操作或者读操作
# a+:光标默认在最后位置,想要读前边的内容,需要移动光标
f.tell() #查找当前光标位置
f.seek() #移动光标位置,括号内的参数为想让光标移动到某个位置的下标
truncate() #截断数据(不能在r模式下,因为truncate是对文件进行操作)
#在w模式下:先清空,再写,再截断
#在a模式下:直接将指定位置后的内容截断
# f.truncate(5)
# f.write(‘hello world‘) #即将前五个字符截断,后边的内容删除掉
# f.close() #文件关闭,每次操作文件后都要把文件关闭
#f.flush() #同步将数据从缓存转移到磁盘上去,每次关闭文件之前,数据是在缓存中暂时存储的,需要flush操作才能实时地将数据刷入到磁盘上
进度条实例:
import sys,time
for i in range(30):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.5)
同样,用print进行flush也可实现
import sys,time
for i in range(30):
print(‘*‘,end=‘‘,flush=True)
time.sleep(0.5)
f=open(‘小重山‘,‘r‘,encoding=‘utf8‘)
print(f.tell())# 取出光标位置
# print(f.read(2))
# print(f.tell())
#
# f.seek(0)# 移动光标到指定的位置
# print(f.read(4))
常规情况下,由于磁盘存储机制不能完成,直接修改文件中的内容是无法完成的,因此要重做一个新文件来进行内容上的修改操作.
以下是对一个有中文字符的file文件进行内容中间的修改过程,需要新建一个文件,将不需要修改的数据读入到新文件里,并且把需要改动的内容修改后放入新文件。但不管这么做,旧文件没有改变。
f = open(‘file‘,‘r‘,encoding=‘utf-8‘)
f_new=open(‘file1‘,‘w+‘,encoding=‘utf-8‘)
num = 0
for line in f:
num+=1
if num==6:
line=‘‘.join([line.strip(),‘abc\n‘])
f_new.write(line)
f_new.seek(0)
for line2 in f_new:
print(line2.strip())
f.close()
f_new.close()
关于转码和编码的过程还不是很理解,后续进行补充。
平凡之路2:python基础知识(1)