python3 文件操作

文件对象:

 with open('/etc/hosts') as f:
 这样打开文件不用使用X.close()手动关闭文件,使用with打开文件,在文件使用结结束后会自动关闭。

r  以读方式打开(文件不存在则报错)
w 以写方式打开(文件存在则清空,不存在则创建)
a 以追加方式打开(必要时创建新文件)

r+ 以读写方式打开
w+ 以读写方式打开
a+ 以读写方式打开
open、file打开文件,一般用open
read读
readline读一行
readlines 读全部

文件写入:

>> file = open('/tmp/123.txt', 'w') #以写方式打开文件
>> file.write('123456') #写入字符串
6
>> file.write('\n') #写入回车,默认是没有回车的
1
>> file.close() #关闭文件

文件指针:
文件内移动:
    seek(offset[,whence]) :移动文件指针到不同的位置
    offset是相对于某个位置的偏移量
    whence的值,0表示文件开头,1表示当前位置,2表示文件的结尾

tell():返回当前文件指针的位置

    python2中支持从直接将文件指针移动到倒数第三个字符,
    >>> f = open('/etc/hosts')
    >>> f.tell()  #查看当前文件指针的位置
    0
    >>> f.seek(-3, 2)  #将文件指针移动到倒数第三个字符,-3代表偏移量,2代表文件末尾
    >>> f.read()
    'n6\n'

    python3中文件打开方式必需以N + b的方式打开,才可以使用指针从后往前移动
    >>> f = open('/opt/hosts', 'rb')
    >>> f.tell()
    0
    >>> f.seek(-3,2)
    155
    >>> f.read()
    b'n6\n'

            适用与日志按时间节点截取的场景:
            一点文件写入123数据到azj文件,
            读取文件最后的文件指针位置到end当中,将文件内容读取到data中。

        两点文件写入456数据到azj文件,
            将文件指针移动到文件2点的位置并将文件指针位置赋值给b,
            读取1点到2点之间的文件内容:
                >>> data2 = f.read(b - end)     #读取文件上次结束位置到第二次结束位置的内容
                >>> data2
                '456\n'

        三点文件写入789数据到azj文件。
            此时文件指针在文件2点时的位置,将剩余文件内容读取到data3中:
                >>> data3 = f.read()            #读取文件剩余的内容
                >>> data3
                '789\n'

    >>> f = open('/tmp/azj.txt')   #首先输入123到azj。文件中
    >>> f.seek(0, 2)                #把文件指针移动到行尾
    4
    >>> end = f.tell()              #把文件指针位置赋值
    >>> f.seek(0, 0)                #文件指针返回开头位置
    0
    >>> data = f.read(end)          #读取文件开头到刚才行尾文件指针的文件内容
    >>> data
    '123\n'
    >>> f.seek(0, 2)                #写入456到azj文件,将文件指针移动到文件末尾
    8
    >>> b = f.tell()                #将文件指针位置赋值
    >>> f.seek(end, 0)              #将文件指针移动到上次结束位置
    4

    写入789到azj文件
    >>> data2 = f.read(b - end)     #读取文件上次结束位置到第二次结束位置的内容
    >>> data2
    '456\n'
    >>> data3 = f.read()            #读取文件剩余的内容
    >>> data3
    '789\n'

文件写入:   
    以r+的方式打开文件时,写入文件是以覆盖的形式写入。

 标准文件:
        程序一执行,就可以访问三个标准文件
        标准输入:一般是键盘,使用sys.stdin
        sys.stdin.<两次TAB键>
        >>> sys.stdin.readline()
        asdf
        'asdf\n'  #和input差不多,区别是会读取到回车的动作

    标准输出:一般是显示器缓冲输出,使用sys.stdout
        sys.stdout.<两次TAB键>
        >>> sys.stdout.write('12344')
        123445          #返回12344字符串并返回字符串的长度5
        >>> sys.stdout.writelines('123')
        123>>>          #返回字符串本身,没有回车
    标准错误:一般是显示器的非缓冲输出,使用sys.stderr
        sys.stdeer.<两次TAB键>
        >>> sys.stderr.writelines('123')    #标准错误输出
        123>>> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章