文件的基本操作

文件

什么是文件

可以把文件理解成是操作系统提供的虚拟的单位,有了文件我们可以读写数据,没有文件的话应该去硬盘上通过机械手臂寻找数据

如何使用文件

  1. 打开文件
  2. 读写数据
  3. 保存
  4. 关闭文件

打开&关闭文件

打开&关闭文件

方式一:用open打开文件,close关闭文件

f = open(文件路径, 打开模式, 编码格式)		# 打开文件
... # 读写数据(此处省略不写,下文进行详细介绍)
f.close() # 关闭文件

方法二:open打开文件后我们还需要手动释放文件对操作系统的占用。但是其实我们可以用with打开文件,不需要用close关闭文件,文件时会自动关闭。(推荐使用)

with open(文件路径, 打开模式, 编码格式) as file:
...
# 用with打开文件时,不需要用close()关闭

del f和f.close()的区别

del f :只删除了变量名,但是文件对于操作系统来讲还是打开状态的

f.close():不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态。所以我们必须使用f.close()来关闭文件

文件路径

文件路径就是文件在计算机中存放的位置,在对文件进行操作时,文件路径分为绝对路径和相对路径

绝对路径

从根目录开始,一直到你需要的文件路径。如“C:\Users\86182\Desktop\test.txt”

相对路径

从当前文件夹开始,到你需要的文件路径,只需要输入文件路径,要打开的文件必须和运行的py文件必须得在一个文件夹下。如“text.txt”

打开模式(不写默认是r)

可读模式:分为 rt和rb。默认的r也就是rt,打开的text文本类型;rb表示你写的字符串为二进制,在打印的时候不需要使用终端的编码处理,直接打印原生的二进制即可)。当打开的文件不存在时,会报错。

可写模式:分为 wt和wb。默认的w也就是wt,写入的是text文本类型;wb表示写入二进制。打开文件不存在时,会在该目录下新建该文件。文件存在时,会清空文件内容再写入

可追加模式:分为at和ab。默认的a也就是at,在文件的末尾加入text文本类型;wb表示写入二进制。打开文件不存在时,会在该目录下新建该文件。

可读可写模式:r+、w+ 、a+ 等,既可以读取数据,也可以写入数据

注意:t、b不能单独使用,r、w、a可以单独使用

编码格式

打开该文件时所用的编码格式,不写默认是编辑器的编码格式

补充(open内的路径前的r)

由于路径里会出现“\n”、“\t”等特殊字符,r 告诉接下来的字符串,里面所有的特殊字符都变得无意义,以免找路径时出错

fw = open(r'C:\Users\Y\test2.txt',mode='w',encoding='gbk')

读取文件

以'test.txt'文本文件为例

read()

一次性读取文件中的全部内容,返回一个字符串

fr = open(r'C:\Users\Y\test.txt',mode='r',encoding='gbk')
data = fr.read() # 读出文件全部内容
print(data)
Hello world!
My name is nick
Nice to meet you

readline()

一次只能读取文件的一行,返回一个字符串

fr = open(r'C:\Users\Y\test.txt',mode='r',encoding='gbk')
data = fr.readline() # 一次只能读取一行
print(data)
Hello world!

readlines()

将文件每行作为一个字符串,这些字符串以列表的形式读取出来,返回一个列表

fr = open(r'C:\Users\Y\test.txt',mode='r',encoding='gbk')
data = fr.readlines()
print(data)
['Hello world!\n', 'My name is nick\n', 'Nice to meet you ']

写入文件

write()

当打开模式为w时,先将文件内容清空后,再将数据写入到文件中;若打开模式为a时,直接在文件末尾添加数据

fW = open(r'C:\Users\Y\test.txt',mode='w',encoding='gbk')
fW.write("I am from China")

文件的高级应用

文件内指针的移动

假设我们需要在文件内容中间的某一行增加内容,如果使用基础的r/w/a模式实现是非常困难的,因此我们需要对文件内的指针进行移动

while open('test.txt',mode='r+',encoding='utf-8') as fr:
fr.readline()
fr.write('写入数据') # 写在文件的最后一行

硬盘上从来没有修改一说,硬盘只有覆盖,即新内容覆盖原内容

seek(self, offset: int, whence: int = 0)

offset代表文件指针的偏移量,单位是字节;whence为0表示从文件开头,为1表示从当前位置,为2表示从末尾

with open(r'test.txt',mode='r',encoding='gbk') as fr:
fr.seek(3,0)
data = fr.read()
print(data)
# 将光标从文件开头偏移3个字节后的数据打印出来

tell()

查找光标所在的位置

with open(r'test.txt',mode='r',encoding='gbk') as fr:
fr.seek(3,0)
print(fr.tell())
# 光标所在的位置,此时返回的是3

read(self, n: int = -1)

光标后的字符个数n,一个中文1个字符,3个字节;一个英文一个字符,一个字节

truncate(self, size: int = None)

如果它有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空

文件拷贝

如果:qq想修改这个程序,微信也想修改这个程序,两者都已经读取文件成功,都拿到了tank dsb,但是qq想修改tank dsb中的sa,微信想把s修改成b,这两个修改一定有先后顺序,假设qq先修改,那么s已经变成了a,但是微信找的到s吗?,找不到了,报错.

qq想修改tank dsb中的sa,微信想把s修改成b,所以我给qq一份拷贝文件,我给微信一份拷贝文件,然后让他们各自修改,修改成功后,删除原文件,修改替换后的文件名为原文件

with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。

with open('test.txt', 'r', encoding='utf8') as fr, \
open('test_swap.txt', 'w', encoding='utf8') as fw:
for i in fr:
i = i.replace('山水', '天下')
fw.write(i)
import os
os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')

day09-文件的操作的更多相关文章

  1. Day09文件操作

    1.什么是文件 文件:操作系统为应用程序或者用户提供的一种操作硬盘的虚拟单位 强调:①文件是操作系统提供的虚拟单位②应用程序或者用户对文件的读写操作其实都是向操作系统发送指令 2.为什么要用文件 文件 ...

  2. Linux命令-文件文本操作grep

    文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...

  3. [No000083]文件与文件夹操作

    #region Folder option 文件夹操作 /// <summary> /// 指定目录是否存在 /// </summary> /// <param name ...

  4. PHP 文件夹操作「复制、删除、查看大小」递归实现

    PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...

  5. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  6. OC NSFileHandle(文件内容操作)

    OC NSFileHandle(文件内容操作) 初始化 [NSFileHandle fileHandleForUpdatingAtPath:@"data.txt"]; //file ...

  7. python对文件的操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  8. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  9. Adobe AIR对本地文件(XML文件)的操作

    引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/ Air的文件操做主要涉及两个类,FIle和FileStrea ...

  10. PHP 文件的操作

    操作文件的步骤: 1.打开文件2.做操作PS!!!3.关闭文件 打开 操作

随机推荐

  1. maven bug之Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project acSpaceCommon: Fatal error compiling: tools.jar not found: C:\Program Files\J

    maven打包项目的时候一直报这个异常  一般的解决办法我都试过 在pom.xml加代码 也不行  只有10分了  求大神解答 这是因为测试代码时遇到错误,它会停止编译.只需要在pom.xml的< ...

  2. Workspace in use or cannot be created, choose a different one.--错误解决的方法

    eclipse 使用一段时间后.有时会由于一些故障自己就莫名奇异的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: Workspace in use or ...

  3. 喷水装置(一)(南阳oj6)(简单贪心)

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 现有一块草坪,长为20米.宽为2米.要在横中心线上放置半径为Ri的喷水装置.每一个喷水装置的效果都会让 ...

  4. git-svn for mac

    熟练使用 git ,新公司用的是 svn,这就尴尬了,为了这个习惯问题,我还是毅然坚持使用 git,但是又不与公司的 svn 冲突,所以就找到了 git 的 git-svn 插件. 在 mac 上使用 ...

  5. 数组方法-->map()

    map()方法: Array.map((数组元素, 数组元素的下标, 数组本身)=>{}[,thisArray]) 1.调用时在数组内部发生了一次从 0 到 length-1 的循环: 2.返回 ...

  6. Android中静态变量的生命周期

    静态变量的生命周期,起始于类的加载,终止于类的释放.什么时候类会加载呢?我们知道,在app打开时,会创建一个进程,然后初始化一个dvm的实例,负责类的加载释放 和 垃圾回收等.换句话说,在进程创建之后 ...

  7. Codeforces Round #367 (Div. 2) 套题

    吐槽:只能说是上分好场,可惜没打,唉 A:Beru-taxi (水题,取最小值) #include <cstdio> #include <cstring> #include & ...

  8. Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩

    1.Kubernetes介绍 1.1 简介 Kubernetes是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案.其次,它是一个开放的开发平台.最后,它是一个完备的分布式系统支撑平台.Ku ...

  9. Java —— 正则表达式

    0. 注意 正则表达式里的点号(.),可以匹配除换行符之外的所有字符 Java 语言同其他语言中的正则表达式的不同在于: 对 \(反斜线)的不同处理 \\:其他语言中,表示在正则表达式中插入普通的反斜 ...

  10. JSP-Runoob:JSP 自动刷新

    ylbtech-JSP-Runoob:JSP 自动刷新 1.返回顶部 1. JSP 自动刷新 想象一下,如果要直播比赛的比分,或股票市场的实时状态,或当前的外汇配给,该怎么实现呢?显然,要实现这种实时 ...