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:读取二进制。

原文地址:https://www.cnblogs.com/pangbing/p/9125823.html