li = [22,34,2,11] print (li) li.sort() print (li)
或者直接
new = sorted(li) print (new)
字符串和数字不能放在一起排序,全是数字按照数字大小排序。如果是字符串,分三类,数字优先于字母优先于中文,字符码排序,从前往后拍,最大位要是小就放在前面,如果相同比下面的一位。
文件操作:
一,打开文件
二,操作文件
三,关闭文件
open(文件名,模式,以什么编码)
我创建了一个'ha.log'文件
f = open('ha.log') data = f.read() f.close() print (data)
一、打开文件
1
|
文件句柄 = open ( '文件路径' , '模式' ) |
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
打开文件的模式有:
- r ,只读模式【默认】
- w,只写模式【不可读;不存在则创建;存在则清空内容;】(写内容是从头开始写,先清空)
- x, 只写模式【不可读;不存在则创建,存在则报错】
- a, 追加模式【不可读; 不存在则创建;存在则只追加内容;】
如何以字节的形式读取文件?
f = open("ha.log","r") data = f.read() f.close() b = byte(data,coding = "utf-8") print (b)
同理写也一样可以做到
打开文件 python默认以字节码(二进制)形式打开,但是默认做了编码处理,转换成了字符串。所以二进制方式打开(rb)不需要设置编码
但是以普通方式只读的话,一开始是二进制文件,需要指出用什么编码(不设置默认为utf-8)。
"+" 表示可以同时读写某个文件
- r+, 读写【可读,可写】
- w+,写读【可读,可写】
- x+ ,写读【可读,可写】
- a+, 写读【可读,可写】
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
程序员如何通过字节自己转换成字符串?
str_data = str(data,encoding = "utf-8")
print (str_data)
以上操作,平时日常只会用r/w/a (不会加b)
r/w/x/a ->产出和写入 都是字符串类型
rb/wb/xb/ab ->产出和写入都是二进制类型
利用指针了解模式特性以及过程
如何得知read光标的位置?(指针为0为起始位置)
print (f.tell())
可以通过给定read()参数去设定具体“读”多少字符(如果有rb则是字节)。
data = f.read(1) print (data) print (f.tell())
如果读到中间的时候,调用write()写进内容,指针就会被调至最后。(写的时候永远是从最后写)。
对于r+:写入的时候,在末尾追加写入。同时指针在最后。
f = open('ha.loh','r+',encoding = 'utf-8')
对于w+: 先清空,写之后再读,这个时候指针再最后。也读不出来,要调整指着。(seek(0))
f = open('ha.log','w+',encoding = 'utf-8')
data = f.read()
print (data)
反馈是空值。因为w+是先写再读。但是先写,会清空文件,所以data才是空。
正确的具体操作如下:
f = open('ha.log','w+',encoding = 'uft-8') f.write('何丽丽') f.seek(0) data = f.read() f.close() print (data)
对于x+(与w+一样,但是如果只用来做判断文件是否存在,如果文件存在,就会报错 )。
对于a+。
f = open('ha.log','a+',encoding = 'uft-8')
data = f.read()
f.close()
print (data)
输出为空值。因为a是append追加,使用的同时就把指针移动到末尾了。
一些指针操作:
f.seek()改变指针的位置
f.tell()获取指针的位置
操作:
for line in f: print (line)
python代码自动关闭的程序:
with open (xxx,'r') as f: f.read()
以上不用close了,自动帮助close。
在python2.7之后。with操作支持同时打开两个文件。比如:
with open (xxx,'r') as obj1, open (xxx,'r') as obj2: pass
最后都是with帮助关闭。
如何转移文件?一行一行读文件,同时一行一行的写入到另一个文件?
with open('源文件','r') as obj1, open('新文件','w') as obj2: for line in obj1:
obj2.write(line)
实现读一行写一行。减少内存的消耗。因为open不会进入ram