1、文件在哪里?
如果用代码对文件进行操作,需要先找到那个文件
MacOS/Linux:斜杠/ 表示根目录,一切的文件、目录都存放在根目录下面。
Windows系统:就不一样了,它每一个磁盘分区都有自己的根目录,所以用分区名加反斜杠表示,如 D:
虽然这MacOS/Linux与Windows这两种目录结构长得不一样,但定位文件的位置都可以用“相对路径”和“绝对路径”来表示
2、绝对路径&相对路径
绝对路径:
是从根目录出发的路径,由于以根目录为基准,对于Linux/MacOS等类Unix系统,绝对路径就是以斜杠/开头,路径中的每个目录之间用斜杠/进行分隔,最后以目标文件或目标目录结尾。对于Windows系统,绝对路径以分区名加反斜杠开头,路径中的每个路径之间用反斜杠进行分隔,同样最后以目标文件或目标目录结尾。
相对路径:
是从一个参照位置出发,也就是说,它表示从那个位置来看,其他文件处于什么路径。用相对路径时,我们用点 . 来表示参照文件当前所在的目录,用 .. 来表示更上一层的父目录,如果继续往上走,MacOS/Linux就用 ../..,而Windows就用....来表示。另外,./是可以省略的,所以在同一目录下的文件,想互相用相对路径找到彼此的话,可以直接使用文件名.
此外,很多编辑器也可以直接帮你复制文件的路径,比如Pycharm,如下图,可以获得文件的绝对路径(蓝色部分)和以最顶层项目目录为参考的相对路径(仓库根路径)
能够用绝对路径和相对路径来定位文件的位置后,我们就可以对文件进行操作了~~~
3、Python读文件
1)用f.read()读取:一次读取所有内容(适合体积不大的文件)
PS:如果是在同一文件夹下,.其实也是可以省略的
f = open(".", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()
其中,open()函数的第一个参数是文件的相对路径,第二个参数是模式,其中读模式可以省略,因为它是默认的模式,第三个参数是编码方式,最好写上,都是utf-8。content用来接收f文件读的内容,最后记得用close()函数释放资源。此外,当我们调用完一次f.read()后,Python的指针就已经指向了文件的末尾,所以当再次调用时,读到的内容将会是空字符串。要想重新读到完整内容,智能把文件关了再重新open
有的时候,我们很容易忘记写close()函数,所以可以用with的方式来写代码,就不需要写close()了,代码如下:
f = open(".", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()
另外,在文件特别大的情况下,最好不要用read,因为读出来的内容会占很大的内存,甚至把内存给爆了。如果你需要一次性读完整个文件,可以给read传一个数字,表示读多少字节,那么下次调用read时,就会从那个位置继续往下读。代码如下:
f = open(".", "r", encoding="utf-8")
print("第1个到第5个字节的内容如下:")
ad(5))
print("第6个到第10个字节的内容如下:")
ad(5))
输出:
2)用f.readline()读取:一次读取一行
此外,我们还可以用f.readline()函数来逐行读取,比如我们调用两次f.readline()方法,Python将会读取前两行的内容。
with open(".", "r", encoding="utf-8") as f:adline())adline())
输出:
疑问:为什么用f.readlines()后输出的内容中间有一个额外的换行呢?
答案:因为f.readlines会把每行后面的换行符也读到,同时print()本身就会默认结尾换行,所以两个换行符结合起来,就会形成多一个的空行。
3)用f.readlines()读取
with open(".", "r", encoding="utf-8") as f:content = f.readlines()print(content)print(type(content))
输出:
应用场景:
一般f.readlines会结合for循环使用,我们通常把读到的内容赋值成一个变量,然后遍历它。
4、Python写文件
写文件操作和读文件操作很相似,只要把open()中的“r”改成"w"即可。用w模式打开文件进行写入的话,如果目标文件不存在,Python则会新建该文件;如果原本那个文件就已经存在,Python会把那个文件内容清空,所以用w模式之前要三四。
1)w模式写文件
注意:每次调用完write()后,它不会自动帮你换行,所以你要在内容中手动加入换行符。
with open(".", "w", encoding="utf-8") as f:f.write("Hello")f.write("world")
3)a模式写文件
问题:如果我不想把原本文件清空,只想在后面追加些内容,应该怎么办?
答案:那就不能用w模式了,应该将参数改为a,表示附加内容,而不是清空重写。代码如下:
with open(".", "a", encoding="utf-8") as f:f.write("n窗前明月光,n")f.write("疑是地上霜。n")
另外,a模式和w模式一样,如果目标文件不存在,它会帮你新创建一个。
3)r+模式同时支持读写文件
无论是用w模式还是用a模式,你都无法用read()去读取文件原本的内容,如果硬要对文件对象调用read()方法,则程序会报错不支持读操作。那怎么办?
答案:用r+模式可以同时支持读写文件。而且write()调用后,会以追加的形式在文件后面添加新的内容
with open(".", "r+", encoding="utf-8") as f:ad())f.write("hello!")
练习题:
任务1:在一个新的名字为“”的文件里,写入以下内容:
我欲乘风归去,
又恐琼楼玉宇,
高处不胜寒。
任务2:在上面“”文件的结尾处,添加以下两句:
起舞弄清影,
何似在人间。
# 任务1:在一个新的名字为“”的文件里,写入以下内容:
# 我欲乘风归去,
# 又恐琼楼玉宇,
# 高处不胜寒。
with open(".", "w", encoding="utf-8") as f:f.write("我欲乘风归去,n又恐琼楼玉宇,n高处不胜寒。")# 任务2:在上面“”文件的结尾处,添加以下两句:
# 起舞弄清影,
# 何似在人间。
with open(".", "a", encoding="utf-8") as f:f.write("n起舞弄清影,n何似在人间。")
本文发布于:2024-02-04 23:26:22,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170718795260723.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |