python文件内容处理(一)

综述:一定要理解光标移动的规则

---------------------------------------------------------------------------第一部分基本操作--------------------------------------------------------------

1.对象可以调用方法,文件是对象,所以也可调用对应的方法。操作文件对象,先建立文件对像。

2.文件打开方法或者说对象创建方法

方法一:函数open('filename'),唯一一个强制参数,文件名,其他参数:打开模式,编码用的多一些,需要close()函数关闭。返回文件对象(句柄),在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

方法二:with open() ----自动关闭,报错也会自动关闭,不需要 close() 函数关闭

3.打开模式决定可以进行哪些操作,也就是文件对象模式。

文件打开基本模式:(1)只读r;不能写  (2)只写w;不能读  (3)追加a;可读,无则新增,有则追加  (4)组合模式;读写

第一部分:文件的读'r':相关方法 read();readline();readlines()

     read(),按照字符取数据,注意光标位置,可指定读取的字符长度:例如read(6)读取六个字符长度

     readline(),取一行的内容,包括,换行符也会打印,也有参数限制可打印的长度;连续print打印,光标移动打印行的末尾,打印的不重复

     readlines(),取全部的内容,把每行作为列表的一个元素,以列表的形式打印,可for循环遍历

第二部分:文件的写'w':相关方法write(),文件写入内容 ,注意,写的模式慎用,打开的时候已经清空

第三部分:文件的追加‘a’

第四部分:'r+' -----读写,打开一个文件用于读写。文件指针将会放在文件的开头。

              ‘w+’---写读,该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

               ‘a+’---读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

        

---------------------------------------------------------第三部分-------------------------------------------------------------------------------

一,关于换行符的打印:

二,光标移动以及位置

seek() tell()

(1)seek()移动读取文件时光标的位置;

格式:file.seek(offset,whence)也即是seek([文件偏移量][文件指针位置])

说明:参数offset表示要偏移的量,0即是不偏移,正数即向右偏移,负数即向左偏移

          参数whence表示参照位置,其中whence取值0 代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。whence值为空没设置时会默认为0

(2)tell()可打印当前光标的位置   

展示:

with open('file1.txt') as con:
    #print(con.read())
    mon=con.read(4)
    print(mon)
    print(con.tell())    #文件对象调
    con.seek(1,0)        #从首项开始一个字符的位置
    print(con.tell())

----------结果-----
#no p
#4
#1

(3)对于同一个文件对象连续的操作要注意光标的位置是连续变动的

#以下写入文件时
with open('runoob.txt','w') as fib:
    print(fib.tell())      #源文件已经被格式化,光标在第0位
    fib.write('11111')
    print(fib.tell())       #写入之后在第5位,在下一位追加
    fib.write('22222')
    
#1111122222   文件结果

 三,缓存区刷新

flash()刷新缓存区的数据到磁盘,缓冲区被清空,借助进度条打印的例子很容易理解

#实现进度条
#原理:文件没有关闭之前,数据都是在缓存区
import  sys,time

fo = open("runoob.txt", "wb")
for i in range(30):
    sys.stdout.write('*')   #还在内存缓冲区
    sys.stdout.flush()    # 刷新缓冲区(可将此行注释观察异同!)
    time.sleep(0.5)
fo.close()

 比如,一般这个是防止短电未保存。

猜你喜欢

转载自www.cnblogs.com/duguxiren/p/11300119.html