首页 > 代码库 > 平凡之路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)