17

——文件的其他操作——

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

①语法: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。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容