ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-08-02 16:57:54  阅读:163  来源: 互联网

标签:文件 Python 语法 print path shutil os 目录


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,语法,print,path,shutil,os,目录
来源: https://blog.csdn.net/qq_45159791/article/details/119296499

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有