第四章 Python 文件操作和函数

时间:2023-01-01 11:49:03

第三章 文件操作和函数

写在前面:  要干大事,先要有所准备,要学习文件,还是要有所准备的。

第一个问题:字符编码

 

搞 Python 不把编码问题搞清楚,总有一天它会猝不及防的坑你一把。

首先,我知道的编码有:

  1. ASCII 占1个字节,只支持英文

  2. GB2312 占2个字节,只支持 6700+汉字

  3. GBK  GB2312的升级版,支持21000+汉字

  4. Shift-JIS 日本字符

  5. ks_c_5601_1987

  6. TIS-620 泰国编码

  7. unicode 2-4字节,已经收录136690个字符,并在不断的扩张中

 

  8. UTF-8 使用1,2,3,4个字节表示所有字符;优先使用一个字符,无法满足则增加1个字符,最多4个字节,英文占1个字节,欧洲语系占2个字节,东亚使用2个字节,否则使用4个字节。

  9. UTF-16 使用2,4个字节表示所有字符,优先使用2个字节,否则使用4个字节表示

  10. UTF-32 使用4个字节表示所有字符。

第二个问题:字符在硬盘上的存储 

 

所有的编码在内存里都是以二进制存储(二进制是以0b开始的,比如:0b1101100)

在硬盘上读文件要声明以什么编码打开,不然会乱码。

3.1 文件操作

到了文件操作的了

首先,文件打开方式 : f =  open(file = "文件名", mode = "打开模式", encoding = "编码")

   文件的读取和写入:

   写入:文件变量.write(字符串)

   读取:文件变量.read()

   每次读取一行:

   for line in 文件变量:

     print(line)

其次,打开文件要写什么编码,但是你不知道编码怎么办了。有一种方法,可以猜编码方式,基本上可以了解一下,而且会得到可行度。

  模块 chardet 可以猜文件的编码。具体用法:

 

f = open("文件名", "rb")
result = chardet.detect(f.read())
#返回的值的格式:
#{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

最后,打开模式: "r","rb","w","wb","a","ab" 分别是:只读,二进制的只读,写,二进制写,追加,二进制追加

以上可以和+配合使用,比如:"r+":读写模式,先读后写。"w+":写读模式,先写再读。

3.2 函数

函数,是指一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用函数名即可。

函数参数:

  形参变量:定义函数时函数名的括号里面的参数就是形参。

  实参:调运函数,函数名的括号里面的就是实参。

关键参数:定义函数时,如代码,age就是关键参数:

  

def demo(name,age = "20"):
    pass

非固定参数,如代码,args就是非固定参数

def demo(*args):
    pass

*args 是会把多个参数转为元祖,**args会转换为字典

返回值,直接用 return 参数,注意,一到return执行后,函数就结束运行了。

局部变量:

函数里的是局部变量,函数外的是全局变量。哈哈,了解一下 global 的用法。

嵌套函数:

函数里面潜逃一个或多个函数。

name = "Alex"


def change_name():
    name = "Alex2"
    

    def change_name2():
            name = "Alex3"
            print("打印第三层",name)
    change_name2()
    print("打印第二层",name)

匿名函数:

匿名函数就是不直接制定函数的名称,但是还会有函数名的。

一般函数:

  

def calc(x,y):
    return x**y

换成匿名函数:

calc = lambda x,y:x**y

高阶函数:

  就是函数名作为形参。

  

def add(x,y,f):
    return f(x)+f(y)

递归:

函数内部,函数自己调用自身。

  

def clac(n):
    print(n)
    if int(n/2) == 0:
        return n
    else:
        return calc(int(n/2))