补充:
元组:相当于不可变的列表
注意: t=(1,'a',[1,2,]), 列表中的元素可以变,id不变
注意:集合里的元素是不可变的,集合时可变的,有多个值,集合不可以当集合的元素
作业讲解:
s='hello alex alex say hello sb sb'
words=s.split()
dic={}
for word in words: #word='alex'
dic.setdefault(word,words.count(word)) #dic={'hello':2,'alex':2}
print(dic)
换行:
windows平台:\r\n (两个字符)换行,\r为跳到行首,\n为跳至下一行
linux/ mac平台: \n(一个字符)为换行
python:用\n表换行,python帮忙转化成不同平台
数据类型总结
http://www.cnblogs.com/linhaifeng/articles/7133357.html
字符编码
A知识储备:
文本编辑器存原理
结论:在编写py的程序的时候,是没有语法的限制的,编辑的结果
跟编写一个普通的文本文件是没有任何区别,
只有把py程序交给python解释并且在运行的第三个阶段才有了
语言意义
文本编辑器读原理
B、什么是字符编码
人类的字符----》翻译-------》数字
翻译的过程必须遵循一个标准:字符与数字一一对应的关系
这个标准称之为字符编码表
ASCII #起始阶段,满足英文和符号
8bit=1bytes,一个英文字符占用1字节
GBK
16bit=2bytes ,2个字节表示一个中文字符,1字节表示一个英文字符
unicode(内存中固定的编码):
16bit=2bytes,2个字节表示一个字符
#一方面兼容万国,另一方面提供各国和unicode之间的转化
#现阶段还必须使用unicode以兼容硬盘上的用各国自创的编码语言,以后,当硬盘上的程序统一到utf-8上时,内存也有可能用utf-8编码
utf-8:Unicode Transformation Format (硬盘)
1字节表示一个英文字符,3bytes表示一个中文字符
保证不乱吗的核心就是:
文件是以什么编码存的,就必须以该读取
强调:我们能控制的只是存到硬盘上的编码
python3解释器:默认utf-8编码
python2解释器:默认ascii编码 (当时没有utf-8)
文件头的作用:#coding:utf-8 是告诉python解释器,用我指定的字符编码
C、执行python程序第三个阶段发生的事
会识别python语法,定义的字符串类型又涉及到字符编码的概念
x='上' #x=str('上')
python2:
字符串分为两种形式:str和unicode
x='上' #python2的str类型会按照文件头指定的编码来存‘上’
python3:
str:所有字符串都用unicode存
D、转换
unicode---编码encode--->gbk
gbk------->解码decode---》unicode
文件处理
- 打开文件的字符编码
默认的打开文件的编码是:当前操作系统默认的编码,win:gbk,linux:utf-8
f=open('a.txt',mode='r',encoding='utf-8') #应用程序如果用utf-8编写,encoding后跟utf-8,否侧windows系统默认用gbk打开,会乱码。
print(f.read())
f.close()
- 文件处理的基本形式
#1 打开文件‘
# f=open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码'#windows 平台默认gbk,linux和mac平台默认utf-8
#打开文件占两方面的资源(操作系统和应用程序),如果数据的传输是水的话,f相当于水舀(由操作系统生成交给应用程序)
#open只能打开本地文件
f=open(r'a.txt',mode='r',encoding=’utf-8’) #r refer to rawstring
#当文件在同一文件夹时,文件路径可以简写
#mode 默认是rt(只读txt文件),当mode=’w’时,默认wt, mode=’a’,默认at
print(f)
#2 读/写
print(f.read()) #读出所有,
print(f.readable()) #是否可读
print(f.readline(), end=’’) #读一行
with open('ab.txt',encoding='utf-8') as f:
for line in f:#推荐用f,不用f.realines(),因为f是读一行进内存,后者是读所有进内存
print(line,end='')
for line in f.readlines(): #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存
print(line,end='')
print(f.readlines()) #以列表的形式读出所有数据 ['as\n', 'as\n', 'as\n']
#当文件不存在时报错
**注意光标的移动,连续两次realines()时,第二次realines()读不出值。
#3关闭文件
f.close() #回收操作系统的资源
**读写之后一定要回收操作系统的资源, f.close()执行后,应用程序的资源并没有回收,该部分资源由python自动回收。如果有with…(见后面),则不用执行f.close()。不能在f.close()前用del f,否则操作系统找不到f,报错。
#4 用with管理
##with可以帮忙管理文件。当用with打开文件时,不需再输入f.close()。
with open(r'ab.txt',mode='r') as f:
print('===>')
print(f.read())
#with可以管理多个文件
with open(r'a1.txt',mode='r') as f1,open('a2.txt',mode='r') as f2:
print('===>')
print(f1.read())
print(f2.read())
以上形式相当于:
f1=open(r'a1.txt',mode='r')
f2=open(r'a2.txt',mode='r')
f1.close()
f2.close()
#5 w模式
#w:只写模式
#注意
# 1、当文件存在时,清空
# 2、当文件不存在时,创建空文档
f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt
f.write('第一行\n') #注意光标,如果没有\n,接着写
f.write('第二行\n')
f.writelines(['111111\n','222222\n','333333\n'])
f.write('aaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbb\nccccccccccccccc\n')
f.close()
#6追加模式a (一种特殊的写模式)
#a:只追加写模式, 光标移动道文件末尾,日志文件一般用a
#注意:
#在文件不存在时,创建空文件
#在文件存在时,光标直接跑到文件末尾
f=open('access.log',mode='a',encoding='utf-8')
print(f.writable())
f.readlines() #报错
f.write('5555555555555\n')
f.close()