22 Mar 18 补充数据类型+字符编码+文件处理

补充:

元组:相当于不可变的列表

注意: 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平台: (两个字符)换行, 为跳到行首, 为跳至下一行

linux/ mac平台: (一个字符)为换行

python:用 表换行,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
 

文件处理

  1. 打开文件的字符编码
默认的打开文件的编码是:当前操作系统默认的编码,wingbklinuxutf-8
f=open('a.txt',mode='r',encoding='utf-8')  #应用程序如果用utf-8编写,encoding后跟utf-8,否侧windows系统默认用gbk打开,会乱码。
print(f.read())
f.close()
  1. 文件处理的基本形式

#1 打开文件‘

# f=open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码'#windows 平台默认gbklinuxmac平台默认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 ', 'as ', 'as ']

#当文件不存在时报错

**注意光标的移动,连续两次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('第一行 ')  #注意光标,如果没有 ,接着写
f.write('第二行 ')
f.writelines(['111111 ','222222 ','333333 '])
f.write('aaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbb ccccccccccccccc ')
f.close()

#6追加模式a (一种特殊的写模式)

#a:只追加写模式, 光标移动道文件末尾,日志文件一般用a
#
注意:
#
在文件不存在时,创建空文件
#
在文件存在时,光标直接跑到文件末尾
f=open('access.log',mode='a',encoding='utf-8')
print(f.writable())
f.readlines() #报错
f.write('5555555555555 ')

f.close()
原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180322.html