谈一谈|如何随意的对文件进行读写?

简介: 谈一谈|如何随意的对文件进行读写?

问题描述

文件被打开后即可以执行写操作,也可以进行读操作,那么怎么控制文件从什么地方开始读写呢?这就要求文件以读写的方式打开,同时使用一个文件指针指向文件字节流的位置,调整指针的位置就可以对文件进行任意位置的读写了。

解决方案

文件操作有下列三个步骤:

打开文件:就是从磁盘中读取文件到内存中,获取一个文件字节流。

读写文件:就是修改或增长文件的这个字节流。

关闭文件:就是把内存中的字节流写到磁盘中,以文件的形式保存。

在程序看来,文件就是由一连串的字节组成的字节流,每个字节都有一个位置编号,在第n个字节后面有一个文件结束标志EOF(Eed Of File)

如下为文件模型,该文件有6个字节。

它们分别为Ox41,Ox42,Ox43,Ox41,Ox42,Ox61。

字节值

41

42

43

41

42

61

EOF

位置

1

2

3

4

5

6

7

指针








表1 文件模型

文件是一个字节流,读写哪个字节必须要指定这个字节的位置,这是由文件指针来决定的。如字节流有n个字节,p是指针位置(0<=p<=n-1,那么读写规则如下:

(1)0<=p<=n-1时,指针指向一个文件字节,可以读出该字节,读完后指针会自动指向下一个字节,既p会自动加1;p指向EOF的位置,则不能读出任何文件字节,EOF通常是循环读文件的循环结束条件

(2)0<=p<=n-1 时,指针指向一个文件字节,可以写入一个新的字节,新的字节将覆盖旧的字节,之后指针会自动指向下一个字节,既p会自动加1;p指向EOF的位置,则新写入的字节会变成第n+1个字节,EOF向后移动一个位置,在字节流的末尾写入会加长文件字节流。

Python使用tell函数获取当前文件指针的位置,方法是:

文件对象.tell()

fobj=open('c:\\abc.txt','wt')

print(fobj.tell())

fobj.write('abc')

print(fobj.tell())

fobj.write('我们')

print(fobj.tell())

fobj.close

使用feek函数来移动文件指针,方法是:

文件对象.seek(offset[,whence])

def writeFile0):

fobj=open("c:\\abc.txt","wt+")print(fobj.tell())fobj.write("123")print(fobj.tell())fobj.seek(2,0)print(fobj.tell())fobj.write("abc")print(fobj.tell())fobj.close()

def readFile():

    fobj=open("c:\\abc.txt","rt+")    rows=fobj.read()

    print(rows)fobj.close()

try:

writeFile()readFile()

except Exception as err:

print(err)

结语

通过学习可以发现,文件按‘rt’‘wt’或者‘rt+’‘wt+’这两种不同模式打开时,文件的可操作性是不一样的。如果按前者打开,那么就是只读或只写;如果按后者打开,就是既可读又可写。通过这样对文件指针的调整,就可以解决随意控制文件读写的问题。



目录
相关文章
|
5月前
|
Java
揭秘Java文件操作背后的惊天秘密:读写、复制、删除一网打尽!
【6月更文挑战第27天】Java文件操作涵盖读、写、复制和删除。例如,读文件使用`BufferedReader`和`FileReader`;写文件利用`BufferedWriter`和`FileWriter`;复制文件通过读写流实现;删除文件则依赖`Files.delete()`。以上代码示例展示了具体实现。
35 5
|
5月前
|
存储
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
|
4月前
|
存储 前端开发 Java
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
|
5月前
|
Java API
惊呆了!Java文件操作竟能如此简单:一分钟学会读写、复制、删除!
【6月更文挑战第27天】Java编程中的文件操作简单易行。使用`java.io`包中的`FileInputStream`和`FileOutputStream`进行读写,例如写文件将字符串转为字节写入,读文件则循环读取字节。文件复制涉及两个流,从源文件读取后写入目标文件。删除文件只需调用`File`对象的`delete`方法。这些基本操作让Java文件处理变得直观且易于掌握。
32 1
|
5月前
|
存储 编译器 Windows
文件操作(上)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(上)(想要了解如何操作文件,那么看这一片就足够了!)
|
12月前
|
C++
《C++避坑神器·七》二进制读写自定义类型导致崩溃或数据读写不全问题
《C++避坑神器·七》二进制读写自定义类型导致崩溃或数据读写不全问题
90 0
|
测试技术
软件测试面试题:在多用户模式下你用LoadRunnner的哪个组件来回放脚本?
软件测试面试题:在多用户模式下你用LoadRunnner的哪个组件来回放脚本?
112 0
C#文件方式读写结构体探析
最近一直在研究.Net Micro Framework字体文件(tinyfnt),由于tinyfnt文件头部有一段描述数据,所以很想定义一个结构体,像VC一样直接从文件中读出来,省得用流一个个解析很是麻烦。
740 0
|
缓存 数据库 数据库连接