在python中,使用内置函数open()进行文件的操作,open()里面有三个参数,分别是文件路径,访问模式(读/写),编码格式
在此之前我们先来了解一下电脑的文件路径
什么是绝对路径呢,就是我们在电脑中查找文件时通过层级关系(也就是通过固定的路径一层一层的查找),最后找到了这个文件的位置,简言之就是查找文件的路径是固定的,你通过这个路径是一定能找到的你想要的文件的(当然前提是你电脑中得有啊),下面给大家演示一下从电脑磁盘中找我在pycharm中创建的python文件操作的过程:
我是把文件建在了D盘,一般为了电脑能正常使用,我们都把文件放在C盘之外的磁盘中,先点击D盘:
进去D盘后找到所在的文件夹(铁子们在下载文件的时候一定要记得放在哪里了,不然用的时候找不到就麻烦了),这个是我在pycharm中创建的文件夹:
进去之后是这个,这个文件夹是我在pycharm中创建的项目:
点进去之后就出现了我们要找的python文件操作的文件
在磁盘中找文件的时候在磁盘上面是显示绝对路径的:
以上就是一个文件的绝对路径
相对路径是指以当前文件资源所在的目录为参照基础,链接到目标文件资源(或文件夹)的路径。
通俗点说就是你进入一个文件,然后从这个文件的当前路径中去找另一个文件,这就是相对路径
从open这个文件中到达'读取文件'这个文件中就是相对路径,其绝对路径就是从python文件操作这个文文件夹中直接进入
绝对路径和相对路径各有优劣,没有谁更好之说,看使用者想怎么想的
r=read=读取的意思,read简写为r
mode='r'可以直接简写成'r'
从读取文件这个文件中读取遮天文件夹下面的day01.txt文件里面的内容
day01.txt文件里面需要自己输入内容
代码如下:
f = open('../遮天/day01.txt', mode='r', encoding='utf-8')
print(f.read())
'..'表示上一级目录,'.'表示当前目录
不会查看路径的可以参考以下方法:
右键点击想要查找路径的文件,然后鼠标悬浮在复制上面,后面会弹出要复制的内容,点击那个复制路径:
里面有绝对路径,相对路径要自己输入
如果绝对路径被识别为橙色后,为转移字符,只需要在引号前面加个'r'就可以了
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', mode='r', encoding='utf-8')
print(f.read())
w=write=写入的意思,w是write的简写
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt','w', encoding='utf-8')
f.write('这是写入的内容')
需要注意,在写入文件的时候如果文件不存在会创建一个新的文件,如果文件存在则会覆盖原有文件里面的内容,且只能写入一条内容
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt','w', encoding='utf-8')
f.writelines(["\n这个函数可以写入多行内容", "\n要使用到换行符", "\n并且要用列表包裹"])
这个函数可以写入多条内容,但要注意:
1、必须使用列表包裹这些内容
2、如果为了更好的排版,可以使用"\n"换行符
这里的追加是写入的追加,不会覆盖原有内容
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt','w', encoding='utf-8')
f.writelines(["这个函数可以写入多行内容", "\n要使用到换行符", "\n并且要用列表包裹"])
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', 'a', encoding='utf-8')
f.write("\n这是追加的第一行内容和")
追加用的参数是'a',相当于append,writelines函数也可以用追加的方法
使用w+方法会默认先执行w方法(也就是写入的方法),如果没有写入的语句且文件里面有内容,则默认为空(也就是用了w+方法之后你如果没使用w方法,则文件内容为空),下面一段代码帮助大家理解
从这里我们可以看到文件里面是有内容的
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', 'w+', encoding='utf-8')
print(f.read())
输入上面代码然后运行,那个day01.txt文件里面就没内容了
先w后r
这次我们写运用w方法,然后再运用r方法
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', 'w+', encoding='utf-8')
f.write('这是w+方法')
print(f.read())
结果就是输入了一行内容,但读取的时候出了问题,这是为什么呢?其实原因很简单,那就是运用w+方法后,光标会放到最后,但是呢,r方法只会读取光标之后的内容,因此就不会读取到里面的内容了,其解决方法也非常简单,那就是在写入之后使用seek()方法,将文件中的光标放到最前面,我用代码给大家演示一下:
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', 'w+', encoding='utf-8')
f.write('这是w+方法')
f.seek(0)
print(f.read()) #结果为 这是w+方法
seek(0)就是将光标放到前面的方法了,这样就有办法读取内容了
这个方法可以像追加的方法一样,向文件里面写入内容,但不会覆盖,但要注意光标位置,这里的光标位置要在末尾
f = open(r'D:\PycharmProjects\firstproject\遮天\day01.txt', 'r+', encoding='utf-8')
f.seek(0, 2)
f.write('\n前不见古人')
f.seek(0)
print(f.read())
f.seek(0,2)是把光标移动到末尾,然后再写入内容,这样是不会覆盖原有内容的
这是一个二进制图片,用下面的方法把她读取出来
f = open(r"D:\PycharmProjects\firstproject\遮天\R-C.jpg", "rb")
pic = f.read()
print(pic)
这里要注意几个点:
1、读取二进制文件不需要定义编码格式
2、读取后的二进制文件要用一个变量来接收
3、这里读取出来的是一窜二进制编码
f = open(r"D:\PycharmProjects\firstproject\遮天\R-C.jpg", "rb")
pic = f.read()
print(pic)
f = open(r"D:\PycharmProjects\firstproject\遮天\R-C1.jpg", "wb")
f.write(pic)
读取二进制的时候需要用变量接收就是为写入服务的,写入二进制文件的时候需要用到那个读取时候的变量,第六行代码里面的pic就是读取时候的pic变量,记得要把文件名改一下
这里可以看到写入的图片和之前的图片是一模一样的
还有最关键的一点铁子们要注意,如果你想覆盖文件的时候报错了,那就是你文件打开之后就没关闭,所以才没覆盖成功,关闭方法就是用接收打开文件的变量加个close()也就是f.close()
最后再补充几个知识点:
flush()刷新当前文件位置,当文件读取有延迟时,可以使用这个方法刷新一下
tell打印当前文件内光标所在位置,这个方法是当你找不到光标位置是可以
最后呢也是感谢大家的支持