python基础(三)

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

  1.  字典转换为json
    json.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首先要导入json
    f = {"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首先要导入json
    d={"age": "10", "name": "dongmei"}
    f=open('name.txt','w',encoding='utf-8')
    json.dump(d,f,indent=2,ensure_ascii=False)
  2. load/loads:json格式的字符串转为字典,两者区别,是loads是字符串转为字典,load是操作文件,可以直接把json格式的文件,直接转字典
    ##把文件中的内容转为字典loads步骤分为3步:1.打开文件 2.读取文件  2.loads转为字典
    import json
    f =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

 

 

 

posted @ 2019-04-15 15:55  漂亮  阅读(190)  评论(0)    收藏  举报