Python基础语法(二)、文件操作

Python基础语法(二)、文件操作

文件操作

创建文件

在Python中创建文件主要是通过open关键字来实现的。

语法格式:

方法1:f=open('文件名','访问模式')
方法2:with open('文件名','访问模式') as f:(推荐使用,当执行完文件操作后会自动回收文件对象)
			文件操作语句

示例:

f=open('text.txt','w+')#以读写方式创建一个text文件
print(type(f))#<class '_io.TextIOWrapper'>

文件访问模式:

模式 描述
r 以只读形式打开文件,文件指针在文件头部
r+ 以读写形式打开一个文件,文件指针在文件头部
rb 以二进制形式打开一个文件用于只读,文件指针在文件头部
rb+ 以二进制形式打开一个文件用于读写,文件指针在文件头部
w 以写入形式打开一个文件,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件
w+ 以读写形式打开一个文件,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件
wb 以二进制形式打开一个文件只用于写入,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件
wb+ 以二进制形式打开一个文件用于读写,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件
a 以追加形式打开一个文件,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入
a+ 打开一个文件用于读写,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入
ab 以二进制形式打开一个文件用于追加,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入
ab+ 以二进制形式打开一个文件用于追加,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入

写入文件

文件写入是通过write方法来实现的,且访问模式不能是r和相关模式。

语法格式:

f.write("内容")
f.close()#操作完毕后一定要关闭!

示例:

f=open('text.txt','w+',encoding='utf-8')#写入中文时最好设置一下字符编码
f.write("你好!")#给text.txt文件写入“你好”
f.close()#对文件内容操作完后一点要记得关闭!

注意:
write()方法是不带回车的,要实现内容换行,可以自行添加\n

读取文件

文件读取有三个方法可以实现,分别是:read()、readline()、readlines(),可以给它们传递参数,参数是读取的字符数,读取的模式只能是r和r相关的模式。

语法格式:

1、f.read()
2、f.readline()
3、f.readlines()

示例:

f=open('text.txt','r',encoding='utf-8')
print("1",f.read())#读取到内容
print("2",f.readline())#空字符串,read()方法已经将内容读出,后面的就取不到内容了
print("3",f.readlines())#空列表
f.close()

#分开操作
f1=open('text.txt','r',encoding='utf-8')
f2=open('text.txt','r',encoding='utf-8')
f3=open('text.txt','r',encoding='utf-8')
print("1",f1.read())#读取全部内容,解析换行
print("2",f2.readline())#读取单行内容,解析换行
print("3",f3.readlines())#读取全部内容保存列表中,不解析换行,列表元素是每行的内容
f1.close()
f3.close()
f2.close()

删除文件

要操作文件本身,我们就要引入os模块,通过os.remove()可以实现删除文件的操作。

语法格式:

os.remove(fpath)

示例:

import os
fname=input("请输入文件名:")
if os.path.exists(fname):#路径合法性判断
    os.remove(fname)#文件存在就删除文件
    print("文件删除成功!")
else:
    print("文件不存在!无法操作!")

重命名文件、文件夹

如果要实现文件、目录重命名的操作,要通过os.rename()来实现

语法格式:

os.rename(oldname,newname)#可以放文件路径,也可以放文件夹路径

示例:

import os
oldname=input("请输入原文件名:")
if os.path.exists(oldname):#路径合法性判断
    newname=input("请输入新文件名:")
    os.rename(oldname,newname)#如果路径存在就执行重命名操作
    print("文件重命名成功!")
else:
    print("文件不存在!无法操作!")

复制文件

如果要复制文件就需要引入shutil模块,通过shutil.copy()来复制到任意路径。

语法格式:

shutil.copy(path,newpath)

示例:

import shutil,os
path=input("请输入目标文件路径:")
if os.path.exists(path):#路径合法性判断
    newpath=input("请输入复制路径:")#如果带有文件名就是复制和重命名,没有文件名就是复制
    try:
        shutil.copy(path,newpath)#如果复制的文件和复制后的文件是同一个就会报错
        print("复制完成!")
    except shutil.SameFileError as e:#同命名文件异常处理
        print("已存在同命名文件!")
else:
    print("文件不存在!")

移动文件

要实现移动文件的操作就需要使用shutil.move()方法,它可以将文件从一个路径移到另一个路径。

语法格式:

shutil.move(path,newpath)

示例:

import shutil,os
path=input("请输入目标文件路径:")
if os.path.exists(path):
    newpath=input("请输入移动路径:")
    try:
        shutil.move(path,newpath)
        print("移动完成!")
    except shutil.Error:#当文件已存在时的异常处理
        print("文件已存在")
else:
    print("文件不存在!")

文件指针移动

文件的读取不一定都是从开头起读,我们也可以为它设置一个出发位置,即移动文件指针,要移动文件指针就要通过seek(offset[,start])来实现,offset是移动字节数,start是参考位置,0为参考开头,1为参考当前。2位参考结尾。

语法格式:

f.seek(2)

示例:

f=open('text.txt','r+')
f.write("abcdefg")
f.seek(3)#移动三个字节
print(f.read(2))#从c开始读取两个字符:de
f.close()

目录操作

创建目录

如果要创建目录我们可以通过os.mkdir()来实现创建单个目录或者使用os.makedirs()来创建多级目录

语法格式:

os.mkdir(path)#必须保证上一级目录是存在的,因为它只会建最后一个目录
os.makedirs(path)#可以用于创建多级目录

示例:

#1、mkdir方法创建单个目录
import os
path=input("请输入创建目录路径:")
index=path.rfind('/')
if os.path.exists(path[0:index]):#判断上一级目录是否存在
    os.mkdir(path)#只创建最后一个目录
    print("创建文件夹成功!")
else:
    print("路径错误!")

#2、makedirs方法创建多级目录
import os
path=input("请输入创建目录路径:")
print(os.getcwd())
if not os.path.exists(path):#如果目录没有冲突就创建多级目录
    os.makedirs(path)#创建多级目录
    print("创建文件夹成功!")
else:
    print("目录已存在!")

遍历目录

如果我们要查看目录下有什么文件,可以使用os.walk()和os.listdir()来遍历该目录,得出里面有什么文件。

语法格式:

flist1=os.walk(path)#flist1是一个生成器对象,可以遍历生成器查看数据
flist2=os.listdir(path)#flist2是一个列表,仅遍历当前目录的文件内容

示例:

#os.walk当前目录及子目录所有文件和文件
import os
for k in os.walk('../work'):
    print(k)
#结果:
('../work', ['b', 'c'], ['t.txt', 'work1.py'])
#遍历所有目录,第一个元素为当前路径,子文件夹放在第一个列表,子文件放在第二个列表
('../work\\b', [], ['t3.txt'])
('../work\\c', ['d'], ['t.txt'])
('../work\\c\\d', ['e'], [])
('../work\\c\\d\\e', [], [])

#os.listdir(path)查看当前目录下的文件
import os
print(os.listdir("../work"))#仅返回当前目录下的文件
#结果:
['b', 'c', 't.txt', 'work1.py']

#os.listdir(path)递归遍历:
import os
fpath="..\work"
def func(fpath):
    for i in os.listdir(fpath):
        fpath1=os.path.join(fpath,i)#路径拼接
        if os.path.isfile(fpath1):#判断是否为文件
            print("文件:",fpath1)
        else:
            print("文件夹:",fpath1)
            func(fpath1)
func(fpath)

复制目录

复制目录的操作,我们主要是通过shutil.copytree()来实现的。

语法格式:

shutil.copytree(dir,newpath)#newpath必须不存在
#copytree主要是复制文件夹的内容,可以在后面加原文件夹名字以满足复制
#文件夹要求,如shutil.copytree(r"..\work\b",r"..\work\d\b")
#它会在d中创建一个b文件夹,然后把b文件夹里复制的东西都放进去

示例:

import shutil
shutil.copytree(r"..\work\b",r"..\work\d\b")#将b文件下的内容复制到d创建的b文件中

移动目录

如果要移动目录也是通过shutil.move()来实现。

语法格式:

shutil.move(oldpath,newpath)

示例:

import shutil
shutil.move(r'..\work\b',r'..\work\c')#将b目录移动到c目录内

删除目录

删除目录的操作可以通过shutil.rmtree()和os.rmdir()来实现,os.rmdir()只能删除空目录,而shutil.rmtree()可以删除多级非空目录

语法格式:

os.rmdir(dpath)
shutil.rmtree(dpath)

示例:

import shutil,os
os.rmdir("e/d/e")#删除目录e/d下面的e空文件夹
shutil.rmtree('e')#删除目录e下的所有文件和文件夹

常见文件操作相关函数:

函数 描述
os.path.exists(path) 判断路径是否存在,有就返回True,没有就返回False
os.path.join(fpath,spath) 目录拼接,将spath拼接到fpath后,spath不需要带斜杠
os.path.isfile(path) 判断路径是否是文件,是就返回True,不是就返回False
os.path.isdir(path) 判断路径是否是文件夹,是就返回True,不是就返回False
上一篇:Python学习笔记:day16 模块基础知识(time\datetime\json\picle\shutil\logging)


下一篇:P1955 [NOI2015]程序自动分析 离散化