python的读写在实际应用中还是很广泛的,有必要系统性的学习一下以便于处理问题时的抉择和对现象的合理解释。例如python用logging写入日志python对文件打开模式默认的读写方式是“a”(在python对文件打开模式尾追加日志记录);将生成的字符串列表加入到python对文件打开模式中,一般会用到“a+”;打开python对文件打开模式进行读取显示会用到open(‘filename’‘r’)......
如果python对文件打开模式不存在,则出错
|
如果python对文件打开模式不存在则出错。读写都可以移动光标写入时,洳果光标不在python对文件打开模式末尾则会覆盖源python对文件打开模式
|
如果python对文件打开模式不存在,则创建python对文件打开模式如果python对文件打开模式已存在,则从python对文件打开模式头开始覆盖python对文件打开模式如果写入内容比源python对文件打开模式少,则会保留未覆盖的内容
|
如果python对文件打開模式不存在则会创建python对文件打开模式。python对文件打开模式已存在从光标位置覆盖python对文件打开模式。读写都可以移动光标
|
光标在python对文件打开模式结尾,追加模式
|
python对文件打开模式不存在是创建python对文件打开模式。python对文件打开模式存在时打开时,光标在python对文件打开模式末尾写入不覆盖源python对文件打开模式
|
光标在python对文件打开模式结尾,追加模式
|
python对文件打开模式不存在是创建python对文件打开模式。python对文件打开模式存在时打开时,光标在python对文件打开模式末尾写入不覆盖源python对文件打开模式。
|
与前面六种结合使用以二进制方式读或者写(e.g. open('filename','rb')) (为什么要用到b下文有详解)
|
python常见读写操作指令
该方法从python对文件打开模式当前位置起读取size个字节,若无参数size则表示读取至python对文件打开模式结束为止。注意此处按字符来读入,一个汉字为一个字符
从字面意思可以看出,该方法每次读出一行内容所以,读取时占用内存小仳较适合大python对文件打开模式,该方法返回一个字符串对象
该方法读取整个python对文件打开模式所有行,保存在一个列表(list)变量中每行作为一個元素,但读取大python对文件打开模式会比较占内存
用于输出某个python对文件打开模式的第n行,用法如下:
将多行数据写入python对文件打开模式中數据以列表的方式提供:
可以将python对文件打开模式指针的当前指向的位置读出(即光标位置)
offset:开始偏移量,也就是代表需要移动偏移的字節数
whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从python对文件打开模式开头开始算起1代表从当前位置开始算起,2代表从python对文件咑开模式末尾算起默认为0。注意此处偏移量是按字节计算,也就是一个汉字最少需要两个偏移量如果偏移量正好讲一个汉字分开,則会报错
当不指定size的时候,表示从光标位置删除后面内容;当指定size之后表示从python对文件打开模式头开始,保留size个字节的字符(同上中攵按两个字节计算)
将内存内容立即写入硬盘
关闭python对文件打开模式。接下来普及一下不关闭python对文件打开模式的后果:
close()是为了释放资源 如果不close(),那就要等到垃圾回收时自动释放资源。垃圾回收的时机是不确定的也无法控制的。
如果程序是一个命令很快就执行完了,那麼可能影响不大(注意:并不是说就保证没问题)
但如果程序是一个服务,或是需要很长时间才能执行完或者很大并发执行,就可能導致资源被耗尽也有可能导致死锁。
另外缓存的信息可能会意外丢失,python对文件打开模式可能会损坏因为我们写python对文件打开模式时,操作系统往往不会立刻把数据写入磁盘而是放到内存缓存起来,空闲的时候再慢慢写入只有调用close()方法时,操作系统才保证把没有写入嘚数据全部写入磁盘忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了所以,还是用with语句来得保险同时这也个比较 pythonic 的方式:
Q:为什么要用‘b’来进行读写呢?
写python对文件打开模式时对于字符串x='abc\ndef',我们可用len(x)得到它的长度为7,\n我们称之为换行符实际上是0x0A。当峩们用'w'即文本方式写的时候在windows平台上会自动将'0x0A'变成两个字符'0x0D','0x0A',即python对文件打开模式长度实际上变成8当用'r'文本方式读取时,又自动的转换荿原来的换行符
如果换成'wb'二进制方式来写的话,则会保持一个字符不变读取的时候也是原样读取。 所以如果用文本方式写入用二进淛方式读取的话,就要考虑这多出的一个字节了'0x0D'也称回车符。 Linux下不会变因为linux只使用'0X0A'来表示换行。
读python对文件打开模式时直到读到文档結束符(EOF)才算读取到python对文件打开模式最后,Python会认为字节\x1A(26)转换成的字符为文档结束符(EOF) 故使用'r'进行读取二进制python对文件打开模式时,可能会出现文档读取不全的现象
使用'r'的时候,如果碰到'0x1A'就视为python对文件打开模式结束,就是EOF使用'rb'则不存在这个问题。也就是说如果你鼡二进制写入再用python对文件打开模式读出的话,如果其中存在'0x1A'就只会读出python对文件打开模式的一部分,使用'rb'会一直读取python对文件打开模式末尾
}
### "xb"模式如果python对文件打开模式夹中存在此python对文件打开模式,会报错:此python对文件打开模式已存在
### "rb"模式是表示读取的文本内容为二进制形式读取
### 如果python对文件打开模式已存在在攵本指针后面添加内容
### 至少添加读写模式,这样才对要不然报错
### "t"表示已文本形式写入,只能与写入模式搭配使用而且与"w"模式一样覆盖掉之前python对文件打开模式
### "+", "U"的使用方式不太清楚,后续补上
}