排序
li.sort() 对li列表从小到大排序,直接更新li列表
sorted(li) 返回一个li排序后的列表,并非直接对li作更新
列表元素必须是同一种数据类型
文件操作
打开文件:
f = open(文件名,模式,编码)
以某种方式某种编码打开某文件,会返回一个对象(文件名最好写绝对路径,默认只读模式r)
模式:
r 只读,默认。读取的是字节,默认以utf-8编码转换成字符串,所以取得的是字符串,也可以自己设置编码。有中文的话可能要设置utf-8 w 只写,不可读。文件不存在则自动创建,文件存在则会自动把文件清空,只要以只写打开,就会清空文件。 x 只写,不可读。文件不存在则自动创建,文件存在直接报错 a 追加,不可读。文件不存在则自动创建,文件存在则追加 rb 只读。读取的是字节,取得的数据也是字节。不用设置编码 wb 只写。写入字节,写入的话,必须将写入的字符串转换为字节,然后再写入 xb 同上 ab 同上 r+ 读写。读文件read(),会有一个指针,第一次读,指针在第一行行首,读完之后指针会移到最后(读到哪儿,指针移到哪儿),每次读都是读的指针以后的数据,这时写入数据,指针依然往后排,这时读取的话,是空的。不管开始指针的位置在哪儿,只要写入,那么只能追加在最后,指针也会移到最后(r+的写是追加在末尾) w+ 写读。打开文件时已先清空文件,然后再写,接着再读,读的是刚才写的数据,但是写了之后,指针跑到末尾了,所以在读之前需要调整指针的位置 x+ 写读。和w+差不多,只是如果文件存在,则会报错 a+ 写读。打开文件的同时,已经将指针移到最后了 r+b 以二进制读写 w+b x+b a+b
指针操作:
f.tell() 返回指针的位置,为0表示起始位置,返回的数字是按字节排的,指针在第多少个字节后就是返回值。返回3,表示在第一个汉字之后。
f.seek(0) 将指针移到起始位置,也可以移动到其他位置,根据里面传的数字
读取、关闭文件:
data = f.read() 读取文件,默认全部读取,加参数数字,就读取多少个字符 f.close() 如果不执行这条关闭,当代码写入数据后,程序还没执行完,再重新修改文件内容,那么其他程序来读取文件时就读的是后面修改后的内容,然后程序执行完后,再去读取文件,读取的是开始写入的内容(因为程序没终止,写入的内容还在内存里,当程序终止了就写入文件里了) f.flush() 刷新文件内部缓冲区。当写入数据时,是写在内存里的,在程序执行完后才写入文件里,而这个函数是将内存里的数据直接加载写到文件里,即使程序还在运行当中 f.readline() 仅读取一行数据 f.truncate() 截取指针前的数据,后面的都删掉 for line in f: print(line) 一行一行的读取所有数据,这样避免文件太大,导致内存不足 with open("filename","r") as f: f.read() 不用close,会自动close with open("file1") as f1,open("file2") as f2: pass 同时打开两个文件(这个功能在2.7及2.7以后版本才有) 作用:拷贝一个很大很占内存的文件到另一个文件,一般都是把这个文件先放到内存里,然后再拷到另一个文件。用with同时打开两个文件,一个为源文件,以只读打开,另一个新文件,以只写打开,这样就可以一行一行的从源文件拷到新文件里 拷贝过程: for line in f1: f2.write(line)