• 11.文件操作


    文件操作

    一、文件操作一般分为3步

    1.打开

    2.操作

    3.关闭

     

    1.打开文件

        open("文件名称",字符编码).read()

        open():打开文件

        read():读文件

    例子:

        >>> data = open("/etc/passwd",encoding="utf-8").read()

        >>> print (data)

        这样只是对于读文件来说我们这样操作。

       

    例子2:

        1)打开文件

        如果是要操作文件内容的话,我们就不这样操纵了。

        f = open("/etc/passwd",encoding="utf-8")

        #我们把打开文件的内容负值给一个变量(内存对象),我们就方便找到这个文件内容。我们这种方式称为"文件句柄".句柄包含了"文件的名称","字符集""大小""在硬盘的起始位置"

        2)读文件

        f.read()

     

    问题:我们将的的操作同时赋值给两个变量。但是第二个变量的值为空。

        cat /root/a

        1

        2

        3

    >>>f = open("/root/a")

    >>>r = f.read()

    >>>r_1 = f.read()

    >>> print (r)

    1

    2

    3

    >>> print (r_1)

     

    >>> 

     

    我们可以这样理解,我们第一次赋值r的时候,文件的光标已经读取到最后一行。再将f.read()赋值给r_1的时候,文件只能接着上次光标的位置继续读,所以读到是空内容。

    要想重新读取内容,我们让光标重新回到第一行就可以了。

    2、写操作

        注意:python中读和写是不能同时进行的。

        例子:

        >>> f = open("/root/a") #open是默认是读模式的。

        >>> r = f.read()

        >>> print (a)

        1

        2

        3

           >>> f.write('hello world')

        Traceback (most recent call last):

        File "<stdin>", line 1, in <module>

        io.UnsupportedOperation: not writabl #不可写

     

        注意:写操作是创建一个文件,原来文件中有内容,直接会被清空。

     

        例子:

        >>> f = open('/root/hello','w')

        >>> f.write('hello')

        5 

        >>> f.close()

       

        解释:w说明hello文件处于写模式

        close()是关闭文件操作

        linux中写操作要注意,写完毕之后一定要关闭。否则在linux的系统中看不到  写入的内容.

     

    3.追加模式

        a:是append的意思

        例子:

        >>> f = open('/root/hello','a')

        >>> f.write('bbbb')

        4

        >>> f.close()

        它避免了w模式覆盖原有内容的问题。但是依然不能读。

     

    4.读行

           readline() :一行一行的读取内容

    >>> f = open('/etc/passwd','r')

    >>> print(f.readline())

    root:x:0:0:root:/root:/bin/bash

     

    >>> print(f.readline())

    bin:x:1:1:bin:/bin:/sbin/nologin

    readline(数字),从第一行开始读,读4个字符。

    >>> print(f.readline(4))

    root

    从上次的位置继续向后读取6个字符。

    >>> print(f.readline(6))

    :x:0:0

     

     

     

     

    读取多行

    #!/usr/bin/env python

    file = open('/etc/passwd')

    for i in range(5):

       print (file.readline())

    file.close()

     

    5.高效读行

    但是readline()方法读行效率不高,

    我们在工作中用这种循环效率是最高的。

       

    for i in file:

       print (i)

     

    这种打印形式使用了迭代器。

     

    我们用这种形式读指定的行(读取了第二行)

    #!/usr/bin/env python

    f = open('/etc/passwd')

    a = 1

    for line in f:

       if a == 2:

         print ('----------------')

         print (line)

       a+=1

     

    6.显示文件读取的位置。

    tell():显示文件读取到得位置

    seek():移动文件读取的位置,可以理解为光标的位置。

    例子1:

    >>> f = open('/root/pass','r')

    >>> print (f.readline())

    root:x:0:0:root:/root:/bin/bash

    >>> print (f.tell())

    32

    >>> print (f.readline())

    bin:x:1:1:bin:/bin:/sbin/nologin

    >>> print (f.tell())

    65

     

    例子2:移动读取的位置。

    >>> f = open('/etc/passwd','r')

    >>> print(f.readline())

    root:x:0:0:root:/root:/bin/bash

    >>> print (f.tell())

    32

    >>> print(f.readline())

    bin:x:1:1:bin:/bin:/sbin/nologin

    >>> print (f.tell())

    65

    >>> f.seek(32)

    32

    >>> print(f.readline())

    bin:x:1:1:bin:/bin:/sbin/nologin

    我们又开始从32的位置开始读。

     

    7.刷新函数flush() 将写内容同步到硬盘。

    >>> f = open('/root/test','a')

    >>> f.write('aaaaa')      此时在另一终端tail -f查看,没有数据

    5

    >>> f.flush()   在查看就有数据了。

     

    8.查看文件编码

    >>> f.encoding

    'UTF-8'

     

    9.模拟进度条

    stdout:标准输出:向屏幕输出。

    #!/usr/bin/env python

    import time

    import sys

    for i in range(100):

            sys.stdout.write('#')

            sys.stdout.flush()

            time.sleep(1)

     

     

     

    10.读写模式

    r+:读和追加的模式

    w+:写读模式。创建新文件,会清空原有得内容。用的不多。

    rb:读取二进制。

  • 相关阅读:
    LintCode 9.Fizz Buzz 问题(JAVA实现,一个if都不用)
    Docker中使用ElasticSearch
    Docker中使用RabbitMQ
    SpringBoot 缓存工作原理
    SpringBoot 启动配置原理
    docker 常用命令
    SpringBoot 自动配置原理
    动态规划求斐波那契数列
    MySQL 日期加减
    【Linux】Ubuntu:取消用户登录密码
  • 原文地址:https://www.cnblogs.com/pangbing/p/9125823.html
Copyright © 2020-2023  润新知