Python读取文件的操作方法,python文件读写操作
Python读写模式python读写在实际应用中应用广泛。有必要对其进行系统研究,以便在处理问题时做出选择,合理解释现象。比如python用日志写日志文件,默认的读写方式是“A”(在文件末尾追加日志记录);将生成的字符串列表添加到文件中时,通常使用“A”;Open(filename , r )用于打开文件进行阅读和显示。
r以只读模式在文件开头打开文件光标。如果文件不存在,则存在错误。r+ 在读写模式下打开文件光标。如果文件不存在,则存在错误。读写都可以移动光标。写入时,如果光标不在文件末尾,将覆盖源文件w。在只写模式下打开文件。光标位于文件的开头。如果该文件不存在,将会创建它。如果文件已经存在,它将从文件的开头被覆盖。如果写入的内容少于源文件,它将保留未覆盖的内容w+。在读写模式下打开文件。光标位于文件的开头。如果该文件不存在,将会创建它。文件已经存在,从光标位置覆盖文件。读写都可以移动光标。a在只写模式下打开文件。光标位于文件末尾,追加模式文件不存在。是,创建文件。当文件存在时,当它被打开时,光标在文件的末尾。写入不会覆盖源文件a+。在读写模式下打开文件。光标位于文件的末尾。如果附加模式文件不存在,是的,创建该文件。当文件存在并打开时,光标位于文件的末尾,写入不会覆盖源文件。
b与前面六种类型结合使用,可以在二进制方式读或写(如open(filename , rb )(下面详细解释为什么用b)。python常用读写指令1. f.read([size]) # size可选。如果没有参数size,它可以从文件的当前位置读取size字节。注意,这里是字符读入,一个汉字就是一个字符。
2. f.readline() # size可有可无,都只读取一行从字面意思可以看出,这种方法一次读出一行内容,所以读取时占用内存较少,比较适合大文件。此方法返回一个字符串对象。
3. f.readlines() # size可有可无,都读取到文件尾这个方法读取整个文件的所有行,存储在一个列表变量中,每行作为一个元素,但是读取一个大文件会占用更多内存。
4. linecache模块用于输出文件的第n行。用法如下:
2=linecache.getline (lines.txt ,2) #打印第二行使用f.write(strings )将数据写入文件
5. f.write( )将多行数据写入文件,数据以列表形式提供:
f.writelines([11\n , 22\n ,66\n])
7.f.tell()可以读出文件指针的当前指向位置(即光标位置)。
8.f.seek()将光标位置移动到所需位置。用法:f.seek(偏移量,当=0时)
Offset:起始偏移量,即需要移位的字节数。
When:给offset参数一个定义,指明从哪里开始偏移;0表示从文件的开头开始,1表示从当前位置开始,2表示从文件的结尾开始。默认值为0。注意这里的偏移量是以字节计算的,也就是一个汉字至少需要两个偏移量。如果偏移量恰好被一个汉字分隔,将会报告一个错误。
Whence常数:
Os。SEEK_SET: 0相对文件开始位置os。SEEK_CUR: 1相对文件当前位置os。SEEK_END: 2相对文件结束位置f.close() f=open(2.txt ,W ) f.write(123) f.tell() #当前文件指针的位置3 import os # Import os f.seek(-3,OS .SEEK_CUR)#在文件指针-3的当前位置,即移动到起始位置,从而读取2.txt中刚刚写入的123的内容F. Read在指定size时,表示从文件的开头开始保留size字节的字符(同上,中文按两个字节计算)。
10.f.flush()立即将内存内容写入硬盘。
11.f.close() #别忘了!关闭文件。接下来,普及一下不关档的后果:
Close()是释放资源。如果不关闭(),就必须等到垃圾回收才能自动释放资源。垃圾收集的时间是不确定和不可控的。
如果程序是命令,而且执行的很快,可能影响不大(注:不代表没有问题)。
但如果程序是服务,或者执行时间长,或者大量并发执行,就可能导致资源耗尽或者死锁。
此外,缓存的信息可能会意外丢失,文件可能会损坏。因为我们写文件的时候,操作系统往往不会马上把数据写到磁盘上,而是放在内存缓存里,等我们空闲的时候再慢慢写。只有在调用close()方法时,操作系统才保证将所有未写入的数据写入磁盘。忘记调用close()的后果是,可能只有一部分数据被写入磁盘,其余的都丢失了。所以,使用with语句更安全,也是比较pythonic的一种方式:
用open(close.txt , w )作f: f.write(请记住它!)问:为什么读写要用‘B’呢?
答:从两个方面讨论:
写文件的时候,对于字符串x=abc\ndef ,我们可以用len(x)得到它的长度为7。\ n我们称之为换行符,但实际上是0x0A。当我们用 w 也就是文本来写的时候,0x0A 在windows平台上会自动变成0x0D 和0x0A 两个字符,也就是文件长度实际上会变成8。当在“R”文本中读取时,它会自动转换为原始换行符。如果用‘WB’二进制模式写,会保持一个字符不变,读的时候就照原样读。所以如果你用文本写,用二进制读,就要考虑这个额外的字节。0x0D 也称为回车。在linux下不会变,因为Linux只用‘0X0A’表示换行。
读取文件时,直到文件结尾(EOF)才会读取文件。Python会将byte \x1A(26)转换的字符视为文件的结尾(EOF)。因此,使用 r 读取二进制文件时,可能会出现文档读取不完整的情况。
例如:
在二进制文件中,有以下从低到高排列的数据:7F 32 1A 2F 3D 2C 12 2E 76。
如果使用 r 进行读取,则读取第三个字节,这意味着文件结束。
如果用‘Rb’按二进制位读取,读取的字节就不会转换成字符,从而避免了上述错误。
方案:
二进制文件以二进制方式读取“rb”。
总结:
当使用 r 时,如果遇到0x1A 将被视为文件结束,即EOF。当使用 rb 时,这个问题就不存在了。也就是说,如果你用二进制写,然后从文件中读出,如果里面有0x1A ,那么只会读出文件的一部分,而文件的结尾总是用 rb 来读出。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。