文件操作

 

课:文件的常规操作 讲课老师:风陨老师

2021/4/16

一、文件的打开与关闭,有打开就有关闭

​ 1、 文件操作的步骤:(1)、打开文件

 

​ (2)、操作文件

 

​ (3)、关闭文件

 

​ 2,文件目录等级: (1)、*对路径:*对路径就是当前文件的准确位置

 

​ (2)、相对路径:①同级路径,调用方式 ‘.’一个点

 

​ ②不同级路径,上级’…’两个点

 

​ 3、打开文件:open() 需要三个参数: (1)、需要打开的文件名

 

​ (2)、操作方式

 

​ (3)、编码指定

 

open_file = open(“youxi.py”, ‘r’,encoding=’utf8’) # 打开文件

print(read_open)

 

 

open_file.close()    # 关闭文件

 

二、文件的访问方式

1、r 以读取的方式打开文件,文件的游标默认放在文件的开头

 

read_open = open(“youxi.py”, ‘r’,encoding=’utf8’)  # 返回文件对象

 

 

read_open.close() # 关闭文件

 

注意:读取r方式打开的文件只能读,不能修改或写入

 

 

2、w 写入的打开方式,如果该文件已存在则将其覆盖。如果该文件不存在,则创建新文件

 

Write_open = open(“youxi.py”, ‘w’,encoding=’utf8’)

 

pritn(Write_open)

 

#如果没有youxi.py文件,就会在同级重新再建立一个新的 youxi.py 文件

#如果有youxi.py文件 ,就会被覆盖

 

Write_open.close()

 

注意:以w写入方式打开的文件会被清空

 

3、a 追加的方式打开文件,如果该文件已存在,游标默认放在文件的结尾,新的内容会被写入到已 有内容的后面。如果该文件不存在,则创建新的文件进行写入。

 

addto_open = open(“youxi.py”, ‘a’,encoding=’utf8’)

 

 

print(addto_open.write(‘游戏结束’))  #操作文件

 

#如果youxi.py文件存在,’游戏结束’就会被写入到youxi.py文件已有内容的*后面

#如果youxi.py文件不存在,就会在同级新建youxi.py文件,再写入’游戏结束’

 

 

addto_open.close()

 

注意:以追加的方式打开文件不可读取

 

小知识:

(1)r+/w+/a+,在原功能的基础上增加读写的功能,但是想要使用相应功能,光标位置调整至文件开头

 

(2)rb/wb/ab,是以二进制的方式对文件进行操作,不指定编码

 

(3)rb+/wb+/ab+,以二进制的方式打开文件,在原功能的基础上增加读写的功能,但是想要使用相应功能,光标位置调整至文件开头

 

三、读取写入文件相关操作

1、read() 读取指定数量内容(如果传入数值可控制读取数据多少)

 

read_open = open(“youxi.py”, ‘r’,encoding=’utf8’)

 

pritn(read_open.read())      #对文件进行读取操作

#默认读取所有数据

 

 

pritn(read_open.read(100))   #对文件进行读取操作

#传值是100就读取100个数据

 

 

read_open.close()

 

2 readline() 读取一行的内容

 

readline_open = open(“youxi.py”, ‘r’,encoding=’utf8’)

 

print(redaline_open.readline()) #对文件进行读取一行操作

 

#默认读取*行的数据

 

 

readline_open.close()

 

 

3、readlines() 读取多行的内容

 

readlines_open = open(“youxi.py”, ‘r’,encoding=’utf8’)

 

print(readlines_open.readlines())      #对文件进行多行读取操作

 

#默认读取所有数据

 

 

print(readlines_open.readlines(100))

 

#传值为100就读取100行数据

 

readlines_open.close()

 

 

4、write() 写入内容

 

Write_open = open(“youxi.py”, ‘w’,encoding=’utf8’)

 

pritn(Write_open.wite(‘游戏结束…’)) #对文件进行写入操作

 

#在youxi.py文件中已有的内容全部被覆盖写入’游戏结束’此时的youxi.py文件只有’游戏结束…’内容

 

 

Write_open.close()

 

5、writelines() 写入多行内容

 

Writelines_open = open(“youxi.py”, ‘w’,encoding=’utf8’)

 

print(witelines_open.witelines(‘我将写入多行代码,这是*行\n这是第二行\n这是第三行’))

 

#在youxi.py文件中已有的内容全部被覆盖写入’我将写入多行代码,这是*行\n这是第二行\n这是第三行’此时的youxi.py文件只有’我将写入多行代码,这是*行\n这是第二行\n这是第三行’。三行代码内容

 

 

witelines_open.close

 

 

6、flush() 立即刷新缓冲区域(手动保存)

 

flush_open = open(“youxi.py”, ‘r+’, encoding=’utf8′)

 

print(flush_open.flush())                           #对文件进行刷新手动保存操作

 

#flush用来刷新缓冲区的,把缓冲区中的数据立刻写入文件,同时清空缓冲区。

 

flush_open.close()

 

 

7、tell() 获取游标位置

 

tell_open = open(“youxi.py”, ‘r+’, encoding=’utf8′)

 

print(tell_open.tell())                            #查找游标位置

 

#使用tell获取文件游标的当前位置:1、用R和W模式打开的文件游标默认在开头,也就是0

#                           2、用a追加模式打开的文件游标默认在结尾就是2

 

 

 

tell_open.close()

 

8、seek() 调整游标位置

 

seek_open = (“youxi.py”, ‘rb’)

 

print(seek_open.seek())

#位置调整:1、输入0时游标调整到文件开头的位置

#          2、输入为1时游标调整到游标当前位置

#          3、输入2时,游标位置调整到*后

 

 

seek_open.close()

 

#注意:调整位置是以二进制单位读取数据,所以打开文件的方式是二进制,rb , wb,ab,在此情况下不用指定传编码

 

9、 偏移量:

 

offset_open = (“youxi.py”, ‘rb’)

 

print(offset_open.seek(5, 0))    # 其中5指的就是偏移量,0为开头,把游标调到开头完后移5

 

 

#          1、输入0时游标调整到文件开头的位置

#          2、输入为1时游标调整到游标当前位置

#          3、输入2时,游标位置调整到*后

 

 

offset_open.close()

 

 

四、实现文件备份

 

old_fileName = input(‘请输入需要拷贝的的文件\n’)               #设置想要拷贝的文件

 

old_file = open(old_fileName, ‘r’, encoding=’utf8′)        #打开想要拷贝的文件

 

if old_file:                                               #如果文件能打开

 

suffix = old_fileName.rfind(‘.’)                       #查看后缀名字

 

if suffix > 0:                                         #如果有后缀名

 

new_suffix = old_fileName[suffix:]                 #提取后缀名

# print(new_suffix)

 

new_file = old_fileName + ‘[拷贝]’ + new_suffix         #拷贝文件

# print(suffix)

new_file_open = open(new_file, ‘w’, encoding=’utf8′)    #打拷贝的文件

 

for eachline in old_file.readlines():              #读取每一行

 

new_file_open.write(eachline)                      #写入每一行

 

 

old_file.close()                                            #关闭旧文件

new_file_open.close()                                       #关闭新文件

 

五、os 模块的目录及文件操作

import os             #调用os模块为内置模块

 

 

1、os.getcwd()  显示当前路径

 

print(os.getcwd())

 

 

2、os.listdir() 显示同级目录下的所有文件

 

print(os.listdir())

 

 

3、os.chdir() 改变当前路径

 

print(os.getcwd())  #当前路径在现在目录的位置

print(os.chdir(‘输入需要改变到哪一个目录’))

print(os.getcwd())  #当前路径变成输入后的路径

 

 

4、os.mkdir() 创建新文件夹

 

print(os.mkdir(‘../输入新文件夹名’))

 

 

5、os.rmdir() 删除指定目录,且此目录必须为空。否则报错

 

print(os.rmdir(‘../输入要删除的空文件夹’))

 

 

6、os.system() 执行系统指令

 

print(os.system(‘输入指令英文名,如help’))

 

 

7、os.remove() 指定路径删除,且只能是文件不能是文件夹

 

print(os.remove(‘输入要删除路径中的文件名’))

 

 

8、os.rename(‘old’,’new’) 对一个旧的文件重新命名

 

print(os.rename(‘old_file.py’, ‘new_file.py’))

 

 

六、os.path模块操作

1、os.path.join   目录和文件名合成一个路径

 

print(os.path.join(‘文件夹名/dfs/文件夹名’,’文件名字’))

 

 

2、os.path.basename() 返回文件名

 

print(os.path.basename(‘输入要返回位置的文件名’))

 

 

3、os.path.abspath()  查看*对路径

 

print(os.paht.abspath(‘输入要返回*对路径的文件名’))

 

 

4、os.path.relpath()  相对路径

 

python(os.path.relpath(‘文件名’, ‘同级或者不同级文件夹名’))

 

 

5、os.path.getsize()     查看文件大小

 

print(os.path.getsize(‘输入要查看大小的文件’))

 

 

 

6、os.path.getctime()   查询文件创建时间

 

print(os.path.getctime(‘输入需要查看的文件名’))

 

 

 

7、os.path.getmtime()    查询*近修改时间

 

print(os.path.getmtime(‘输入要查询的文件名’))

 

 

8、os.path.getatime()  查询*近访问时间

 

print(os.path.getatime(‘输入要查询的文件名’))

 

 

 

9、os.path.exists()    判断路径中是否存在想要的文件

 

print(os.path.exists(‘输入文件名’))

 

 

10、os.path.isdir()    判断是否是文件目录

 

print(os.path.isdir(‘输入文件名’))

 

 

11、os.path.isfile()   判断是否为文件

 

print(os.path.isfile(‘输入文件名’))

 

 

12、os.path.isabs()    判断是否为*对路径

 

print(os.path.isabs(‘输入文件名’))

 

七、上下文管理器

with open(‘文件名’,’r’,encoding=’编码方式’) as a,\

open(‘文件名’,’r’,encoding=’编码方式’) as b,\

open(‘文件名’,’r’,encoding=’编码方式’) as c:

a = a.readlines()

b = b.readlines()

c = c.readlines()

 

print(a, b, c)

 

小知识:上下文管理器实现原理

1、with open() as a:  自动执行打开文件关闭的过程(一个或多个)

2、a:  变量接收名,后面通过它对打开文件执行读,写,追加的相应的操作

3、内部代码也可执行其它操作

4、内部代码执行结束时,自动执行关闭文件操作

 

八、导,自定义函数路径

import sys   #导包

sys.path     #查看所有能导包的路径

 

sys.path.append(‘添加需要导包的路径’)  #如果想导的路径不在导包目录中就进行添加后即可导路径

 

 

 

from 准确的路径 import 文件内容        #路径导包

 

print(文件内容)                      #测试是否成功导入