python基础(三)

it2022-05-09  56

Python 元组

Python的元组与列表(List)类似,不同之处在于元组一旦被定义里面的元素不能修改,字符串也是不能被修改的

元组定义使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

正常我们ip信息、数据库配置信息等不想被别人修改,可以用元组定义。

t=()#定义一个空元组

 元组中只有两种方法:

count:统计数量

index:找下标


文件读写

 读文件

打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):

>>> f = open('test.txt', 'r',encoing='utf-8')

r表示读文件,只能读不能写,文件不存在时会报错

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,Python引入了with语句来自动帮我们调用close()方法:

with open('name.txt', 'r') as f,open('name.txt', 'w') as f1: #同时打开两个文件 print(f.read())

python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。readlines() 之间的差异是后者一次读取整个文件,像 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。

       .  readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w':

>>> f = open('test.txt', 'w') >>> f.write('Hello, world!') >>> f.close()

注意:'w'这个模式是酱紫:如果没有这个文件,就创建一个;如果有,那么就会先把原文件的内容清空再写入新的东西。所以若不想清空原来的内容而是直接在后面追加新的内容,就用'a'这个模式。

我们可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('test.txt', 'w') as f: f.write('Hello, world!')

python文件对象提供了两个“写”方法: write() 和 writelines()。

write()方法和read()、readline()方法对应,是将字符串写入到文件中。writelines()方法和readlines()方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符。 f1 = open('test1.txt', 'w') f1.writelines(["1", "2", "3"]) # 此时test1.txt的内容为:123 f1 = open('test1.txt', 'w') f1.writelines(["1\n", "2\n", "3\n"]) # 此时test1.txt的内容为: # 1 # 2 # 3

 

truncate函数: f = open('name.txt','a+',encoding='utf-8')f.seek(0)print(f.tell())#告诉你当前指针的位置f.readline()#读取某一行内容f.truncate()#从当前指针位置清空内容

 

关于open()的mode参数:

'r':读,文件不存在读取报错,r的文件指针是最前面

'w':写,文件不存在时帮你创建,但是不能读,会清空原来文件的内容

'a':追加,追加模式,不会清空原来的内容,但是不能读,a是不清空原来的内容添加内容,不能读

'r+' == r+w(可读可写,文件若不存在就报错(IOError))

'w+' == w+r(可读可写,文件若不存在就创建,会清空原来文件的内容)

'a+' ==a+r(可追加可写,文件若不存在就创建,读不到东西),a+不清空原来的内容追加添加内容,可读

总结:只要有r的文件不存在都会报错,只要有w的文件内容都会被清空

字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取utf-8编码的文件:

>>> f = open('test.txt', 'r', encoding='utf-8') >>> f.read() '测试'

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

>>> f = open('test.txt', 'r', encoding='utf-8', errors='ignore')

 读取的文件我们是直接放到内存中,如果某个文件过大,一下子读取会占用过多的内存,此时我们可以一行一行进行读取:

 

with open('name.txt','a+',encoding='utf-8') as f: for line in f: print(line)#打印出每行的数据

 


 

修改文件 

#把文件中所有的小写的s替换成大写的S#思路:1.打开文件,把所有的内容读取出来把小写s改为大写S# # 2.然后清空原文件内容,重新写入新的内容with open('name.txt','a+',encoding='utf-8') as f:#打开文件 f.seek(0)#指针指到最前面 res= f.read().replace('s','S')#把小写的s替换成大写S并读取文件 f.seek(0)#指针指到最前面 f.truncate()#删除原文件内容 f.write(res)#重新把替换的文件写入

切片

切片取值字符串,list,元组都可以用

 python中的切片操作功能十分强大,通常我们利用切片来进行提取list,字符串中某个范围的信息

切片是顾投不顾尾的,实例:

打印结果:

 

切片操作十分有用。我们先创建一个0-99的数列:

>>> L = list(range(100))#rang取0-99的一个list,rang(1-100)是取1到99的数列 >>> L [0, 1, 2, 3, ..., 99]

可以通过切片轻松取出某一段数列。比如前10个数:

>>> L[:10] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

后10个数:

>>> L[-10:] [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

前11-20个数:

>>> L[10:20] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10个数,每两个取一个:

>>> L[:10:2] [0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5] [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什么都不写,只写[:]就可以原样复制一个list:

>>> L[:] [0, 1, 2, 3, ..., 99]

 


json 操作

存在文件中的内容读取出来都是字符串,无论你文件中写的是字典或者数组,读出来都是字符串,write写的内容也只能是字符串

json是一个字符串,如果我们要把一个字典写到文件里面,我们正常是把字段转换为json再写入到文件中

json里面只有双引号没有单引号。

Json   模块提供了四个方法: dumps、dump、loads、load

 字典转换为jsonjson.dump / json.dumps:把字典转换为json串,两者区别是dumps是字典转为json格式的字符串,dump直接把字典格式的文件转为json格式的字符串

dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和dumps的可选参数相同,这些参数都相当实用,现将用到的参数记录如下:

ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。

indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进,相当实用。##字典格式的内容写入到文件中需要3个步骤1.用dumps把字典转为json  2.打开一个文件  3.把内容写入到文件中

import json # 用json首先要导入jsonf = {"age": "10", "name": "dongmei"}res = json.dumps(f,indent=2,ensure_ascii=False) # 把字典转换为json,因为json是一个字符串,indent=2就是让json串前面有两个空格好看点,如果字典中有中文需要设置ensure_ascii=Fals a = open('name.txt', 'w',encoding='utf-8')a.write(res)#写的内容只能是字符串,所以先要把字典转换为字符串##如果用dump把字典格式的内容写入到文件中需要两个步骤:1.只要打开文件 2.内容写入文件就行了 import json # 用json首先要导入jsond={"age": "10", "name": "dongmei"}f=open('name.txt','w',encoding='utf-8')json.dump(d,f,indent=2,ensure_ascii=False) load/loads:json格式的字符串转为字典,两者区别,是loads是字符串转为字典,load是操作文件,可以直接把json格式的文件,直接转字典##把文件中的内容转为字典loads步骤分为3步:1.打开文件 2.读取文件  2.loads转为字典import jsonf =open('user.txt')res =f.read()#文件读取到的是json也就是字符串d =json.loads(res)#把json传串转换为字典print(d)#读到字典的格式内容##把文件中的内容转为字典load步骤分为2步:1.打开文件 2.load转为字典 f =open('user.txt',encoding='utf-8') res =json.load(f) print(res)

集合

 集合天生可以去重,可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合去重

a =[1,2,3,1,4,5]result =set(a)#集合去重print(result)打印结果:{1, 2, 3, 4, 5}

集合取交集

s =set()#定义空集合s1={1,2,3,4}s2={4,5,6,7}print(s1 & s2)#取交集#print(s1.intersection(s2)) #取交集 打印结果:{4}

集合取并集

s1={1,2,3,4}s2={4,5,6,7}print(s1 | s2) #取并集 打印结果:{1, 2, 3, 4, 5, 6, 7}

函数

函数就是方法,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 def cala(a,b):#形参,形式参数 return a+b#返回值res= cala(1,2)#调用函数,实参,实际参数,res接受返回的值print(res 打印结果:3

 

 

 

转载于:https://www.cnblogs.com/dmbk/p/10710809.html


最新回复(0)