文件写入模式与指针操作详解
要是用 r、w、w、a、a 模式去打开文件, 那都是能够进行写入操作的。需要特别说明的是, 在以 r、w、w 模式打开文件的情况下, 文件指针处于文件开头的位置而当以 a、a 模式打开文件时, 文件指针是位于文件结尾之处的。对此情况, 需要加以说明的是, 在以 w 或者 w 这种模式去打开文件之际, 程序会立刻将文件之中的内容予以清空。文件指针的概念用来标明文件读写位置的是文件指针, 要是将文件视作一股水流, 在以 b 模式打开时, 文件里的每个数据是一个字节, 以普通模式打开时, 每个数据是一个字符, 这些数据就好比一个个水滴, 文件指针所标明的就是即将对其进行读写操作的文件位置。图 1 简单示意了文件指针的概念。图 1 文件指针概念示意图文件对象提供了以下方法来操作文件指针seek(): 此方法用以把文件指针移至指定位置, 当为0时此乃默认值, 意味着从文件起始处起算, 譬如将设为3, 便是把文件指针挪至第3处当为1时, 意味着从指针当下位置计起, 比如文件指针当前处于第5处, 把设为3, 就是将文件指针移至第8处当为2时, 意味着从文件末尾计起, 比如将设为3, 表明把文件指针移至文件末尾倒数第3处。tell()判断文件指针的位置。除此之外在程序借助文件对象去进行数据的读写操作之时, 文件指针会自行朝着后方移动, 具体言之, 读写了若干个数据, 文件指针便会自动朝着后方移动相应数量的位置。下面程序示范了文件指针操作f open(.py, rb), 判断文件指针的位置, print(f.tell()), 0, 将文件指针移动到3处, f.seek(3), print(f.tell()), 3, 读取一个字节, 文件指针自动后移1个数据, print(f.read(1)), o, print(f.tell()), 4, 将文件指针移动到5处, f.seek(5), print(f.tell()), 5, 将文件指针向后移动5个数据, f.seek(5, 1), print(f.tell()), 10将文件指针移动到倒数第10处, f.seek(-10, 2), print(f.tell()), print(f.read(1)), d。运用 seek() 方法去移动 文件指针, 这一运算涉及从 文件开头、指针 当前位置、文件 结尾处起始计算, 上面程序对此予以示范 , 它具备这样一系列操作。执行上面所提及到的那个程序 并结合程序 输出结果 , 即可进行体会 文件指针移动所产生的具体效 果。针对文件指针所处位置, 程序会读取该位置对应的数据就程序读取数据数量而言, 文件指针会依照此数量自动往后移动相应位置。输出内容文件对象提供的写文件的方法主要有两个输出字符串, 或者输出字节串, 这是write(str 或 bytes)的功能。只有以二进制模式, 也就是b模式打开的文件, 才能够写入字节串。(可迭代对象)输出多个字符串或多个字节串。下面程序示范了使用 write() 和 () 输出字符串文件对象f被赋值为使用w模式打开x.txt文件, 操作系统相关的换行符表示为os., f这个文件对象执行了写入操作, 写入的内容是我爱加上os., f这个文件对象还执行了另一个操作, 在括号内依次写入了三个连接了os.的字符串, 分别是土门壁甚坚, 加上os.:杏园度亦难。通过os.连接了势异邺城下, 加上os., 最后连接到纵死时犹宽。加上os.。在上面所提及的程序里, 第4行的代码, 它调用write()这个方法, 以此来输出单个的字符串而第5行的代码呢, 它是去调用()这个方法, 进而输出多个字符串的。在运用上面所提及的方法去输出文件之际, 程序会采用当前操作系统默认的字符集。要是有使用指定字符集来输出文件的需求, 那么能够采用二进制形式, 程序会先把所输出的字符串转化成指定字符集对应的二进制数据, 也就是字节串, 之后再输出二进制数据。下面的程序做了这样的一个示范, 示范的内容是使用二进制数据来进行输出, 通过这样的一种方式, 进而实现以 UTF - 8 字符集来保存文件, 这就是整个演示内容了。上面程序里的代码, 是以 wb 模式去打开文件的, 这所表达的意思是, 程序会用二进制形式来输出文件, 在这种情况下, 程序输出的必然得是字节串, 而绝不能是字符串。所以, 程序要调用 () 方法, 把字符串转变成字节串, 在转换的时候设定需使用 UTF-8 字符集, 这就意味着程序将会依照 UTF-8 字符集来保存文件。此程序所输出的文件内容, 和上一个程序输出的文件内容是一样的, 只不过, 此程序输出的文件内容, 是按照UTF - 8字符集来进行保存的。从上面所呈现的程序能够看到, 当运用 w、wb 模式去打开文件之时, 会致使文件内容被清空, 所以, 不管程序运行多少回次, 其输出的文件内容都仅仅留存最近一次的输出数据, 要是程序期望在文件后面添加内容, 那么就应当采用 a 或 ab 模式, 比如像如下这样的程序:你提供的内容存在错误信息, 以下是纠正错误后按照要求改写的: 打开名为‘z.txt’的文件, 以追加和读取模式, 这是当前操作系统上的换行符, 写入‘我爱’, 接着, 将‘土门壁甚坚, ’与当前操作系统上的换行符组合写入, 再将‘杏园度亦难。’与当前操作系统上的换行符组合写入, 然后将‘势异邺城下, ’与当前操作系统上的换行符组合写入, 最后将‘纵死时犹宽。’与当前操作系统上的换行符组合写入。那个位于上面位置的程序, 是以 a 这种模式去打开指定的文件, 这所代表的意义就是, 是以追加模式来实施打开文件这个行为, 所以呢, 在运用 open() 函数将文件打开之后, 并不会马上就把文件里面的内容给清空掉, 而且还会把文件指针移动到文件的结尾之处, 该程序会在文件结尾的那个地方追加内容。程序每次运行上面的那个, 都会朝着 z.txt 文件里进行追加一段内容的操作, 程序运行的次数一旦增多, z.txt 文件的内容相应地就会变得越来越多。

相关新闻