17

作者: 可爱叽叽 | 来源:发表于2019-03-01 11:55 被阅读0次

    ——文件的其他操作——

    我们之前提到的,文件读一遍之后,文件指针的位置就停留在了文件的末尾,这时候如果再进行读取文件,会发现读取不到任何的内容。那么怎么知道文件指针的位置呢?

    ①语法:f.tell()

    tell()方法返回文件的当前位置,即文件指针当前位置。

    文件在什么也没操作的时候,文件指针的位置是0。

    我们对文件读取一行之后,文件的指针位置就发生了变化,按照字符进行计数。

    在这里如果用f.read()进行读取,再对f.read()说明一下:

    语法:f.read(size)           

    参数:size -- 从文件中读取的字节数

    read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。

    那么怎么解决之前所说的问题呢,怎样让指针重新回到指定位置呢?

    ②语法:f.seek(offset[, whence])

    参数:offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

              whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

    比如,我从文件的开头先开始读取一行,然后打印出此时文件指针的位置,然后我再让文件指针回到0的位置,再读取一行,打印此时文件指针的位置。按道理说,我让文件指针回到0的位置之后,我再打印一行应该是文件的第一行。我们来看一下结果是不是这样:

    确实是这样。如果是回到任意位置,打印一行,我们看一下结果:

    ③语法:f.encoding  (注意:后面没有括号)

    f.encoding可以知道文件的编码方式,一般为“utf-8”。

    ④语法:f.fileno()

    fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。

    也就是说fileno()返回的是文件句柄的编号

    在这里再说明一下“文件句柄”:在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

    ⑤语法:f.flush()

    flush是刷新的意思,当我们以写的模式打开文件的时候,我们在写入一行时,如果此时突然断电,这一行就可能没有写进硬盘中,因为文件在读写的时候有一个缓存的机制,断电的时候可能内容还在内存的缓存中,并没有写到硬盘里。硬盘的读写速度是比内存慢的。内存是等待写几行,等到内存的缓存满了之后,再一起写到硬盘中,这个内存的缓存一般很小。

    那么我们怎么保证我们写一行,这一行就能写到了硬盘中?

    这时候就用到了强制刷新。

    flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

    一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

    我们来实践一下:

    我们以“w”的方式打开一个名为“test.text”的文件,并且写进去“星期一”。

    可以看到,名为“test”的text文件中没用任何内容。

    用f.flush()强制刷新一下。

    可以看到,星期一就被写进去了。

    我们再接着写“星期二”。

    一样的,“星期二”没有被写进去。

    再用f.flush()刷新一下。

    “星期二”就被写进去了。

    ⑥语法:f.truncate()

    truncate() 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。

    #指定参数size——截断文件为size个字符

    #不指定参数size——从当前位置起,截断后面所有的字符。

    #如果文件是“w”模式,则文件指针的位置在开始的地方,f.truncate()之后,则会清空所有的内容。

    #如果文件是“a”模式,文件指针的位置在文件的末尾,f.truncate()之后,对于文件来说,没什么变化。

    ⑦语法:f.close()

    close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。当 file 对象被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。使用 close() 方法关闭文件是一个好的习惯。

    ⑧语法:f.closed       (注意:没有括号)

    判断一个文件是否关闭。关闭的话返回True,没有关闭的话返回False。

    ⑨语法:f.name

    f.name是打印文件的文件名。

    (10)语法:f.errors

    f.errors是打印文件的报错级别。

    (11)语法:f.isatty()

    isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。

    (12)语法:f.mode

    打印文件的模式。

    (13)语法:f.readable()

    判断文件是否可读。

    (14)语法:f.seekable()

    判断文件是否可以使文件指针偏移。

    (15)语法:f.writable()

    判断文件是否可写。

    (16)语法:f.writelines()

    writelines() 方法用于向文件中写入一序列的字符串。

    这一序列字符串可以是由迭代对象产生的,如一个字符串列表。

    换行需要制定换行符 \n。

    相关文章

      网友评论

          本文标题:17

          本文链接:https://www.haomeiwen.com/subject/xocxuqtx.html