整理与总结Python关于对文件的操作

一、前言

python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块

二、操作命令

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()

返回指定目录下的所有文件和目录名:os.listdir()

函数用来删除一个文件:os.remove()

删除多个目录:os.removedirs(r“c:\python”)

检验给出的路径是否是一个文件:os.path.isfile()

检验给出的路径是否是一个目录:os.path.isdir()

判断是否是绝对路径:os.path.isabs()

检验给出的路径是否真地存:os.path.exists()

返回一个路径的目录名和文件名:os.path.split()     eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt') 

分离扩展名:os.path.splitext()

获取路径名:os.path.dirname()

获取文件名:os.path.basename()

运行shell命令: os.system()

读取和设置环境变量:os.getenv() 与os.putenv()

给出当前平台使用的行终止符:os.linesep    Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'

指示你正在使用的平台:os.name       对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

重命名:os.rename(old, new)

创建多级目录:os.makedirs(r“c:\python\test”)

创建单个目录:os.mkdir(“test”)

获取文件属性:os.stat(file)

修改文件权限与时间戳:os.chmod(file)

终止当前进程:os.exit()

获取文件大小:os.path.getsize(filename)


文件操作:
os.mknod("test.txt")        创建空文件
fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件

关于open 模式:

w     以写方式打开,
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+     以读写模式打开
w+     以读写模式打开 (参见 w )
a+     以读写模式打开 (参见 a )
rb     以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab     以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+    以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )

 

fp.read([size])                     #size为读取的长度,以byte为单位

fp.readline([size])                 #读一行,如果定义了size,有可能返回的只是一行的一部分

fp.readlines([size])                #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

fp.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq)            #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

fp.close()                        #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

fp.flush()                                      #把缓冲区的内容写入硬盘

fp.fileno()                                      #返回一个长整型的”文件标签“

fp.isatty()                                      #文件是否是一个终端设备文件(unix系统中的)

fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点

fp.next()                                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

fp.seek(offset[,whence])              #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

fp.truncate([size])                       #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

 

目录操作:
os.mkdir("file")                   创建目录
复制文件:
shutil.copyfile("oldfile","newfile")       oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir")        olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname")       文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")   
删除文件
os.remove("file")
删除目录
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir")    空目录、有内容的目录都可以删
转换目录
os.chdir("path")   换路径

三、操作实例代码

需求:将文件夹下所有图片名称加上'_2021'

import re
import os
import time#str.split(string)分割字符串
#'连接符'.join(list) 将列表组成字符串def change_name(path):global iif not os.path.isdir(path) and not os.path.isfile(path):return Falseif os.path.isfile(path):#分割出目录与文件file_path = os.path.split(path) #分割出文件与文件扩展名lists = file_path[1].split('.') #取出后缀名(列表切片操作)file_ext = lists[-1] img_ext = ['bmp','jpeg','gif','psd','png','jpg']if file_ext in img_ext:os.rename(path,file_path[0]+'/'+lists[0]+'_2021.'+file_ext)i+=1 #注意这里的i是一个陷阱elif os.path.isdir(path):for x in os.listdir(path):#os.path.join()在路径处理上很有用change_name(os.path.join(path,x)) img_dir = 'D:\\xx\\xx\\images'
img_dir = img_dir.replace('\\','/')
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print('程序运行耗时:%0.2f'%(c))
print('总共处理了 %s 张图片'%(i))

输出结果:

程序运行耗时:0.11
总共处理了 109 张图片

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1717. 删除子字符串的最大得分

文章目录1. 题目2. 解题374 / 1631,前22.9%1215 / 7873,前15.4%1. 题目 给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。 删除子字符串 "ab" 并得到 x 分。 比方说,从 “cabxbae” 删除 ab ,得…

利用Python把四张图片按照顺序拼接起来

一、需求: 给出四张图片,按照一定的顺序拼接起来 二、图片: 左上角:(像素512*512) 右上角:(像素284*512) 左下角:(像素284*512) 右…

证券总结

1.暴涨之后,如果没有阳线助涨,则可能跌,也可能震荡,看下一个交易日的状况定夺;暴跌类似。 2.持续小规模阳线,最后稍大阳线,但非暴涨。此时如果下一交易日阴线极有可能是短暂小幅回调,莫做空&…

Linux:文件创建时间如何修改?

一、需求 修改文件创建时间 二、知识及方法步骤 touch命令用于创建空白文件或修改文件时间。 在Linux系统中一个文件有三种时间: 更改内容的时间 - mtime:当文件进行被写的时候,CTime就会更新更改权限的时间 - ctime:当文件的…

面向对象学习笔记

abstract:抽象类或方法的关键字注意事项:一个类中至少有一个抽象方法不允许有大括号主要意义就是规范方法,要求必须按照抽象中的方法来写继承抽象类的类,必须重载完全抽象类的方法抽象类是不能被实例化的,因为本身没有意义 extend…

小案例:编写立方体六个面,合成一张全景图后端

一、需求: 给出立方体六个面,合成一张全景图 二、主要知识:py360convert 2.1、该项目的特点: 立方体贴图和等矩形之间的转换 等角于平面 纯python实现,仅依赖于numpy和scipy矢量化实施(在大多数地…

LeetCode 1721. 交换链表中的节点(快慢指针)

文章目录1. 题目2. 解题1. 题目 给你链表的头节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。 示例 1: 输入:head [1,2,3,4,5], k 2 输出&am…

[Python] NotImplemented 和 NotImplementedError 区别

NotImplemented 是一个非异常对象&#xff0c;NotImplementedError 是一个异常对象。 >>> NotImplemented NotImplemented >>> NotImplementedError <type exceptions.NotImplementedError>>>> type(NotImplemented) <type NotImplemented…

爬虫小案例:基于Bing关键词批量下载图片

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、演示&#xff1a; 三、直接上代码 import os import urllib.request import urllib.parse from bs4 import BeautifulSoup import re import time# 设置请求头 header {Us…

LeetCode 1722. 执行交换操作后的最小汉明距离(并查集)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 source 和 target &#xff0c;长度都是 n 。 还有一个数组 allowedSwaps &#xff0c;其中每个 allowedSwaps[i] [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi&#xff08;下标从 0 开始&#xff09;的两个元素。…

线性表的顺序表示和实现

/* 顺序表存储结构容易实现随机存取线性表的第i 个数据元素的操作&#xff0c;但在实现插入、 删除的操作时要移动大量数据元素&#xff0c;所以&#xff0c;它适用于数据相对稳定的线性表&#xff0c;如职工工资 表、学生学籍表等。 c2-1.h 是动态分配的顺序表存储结构&#x…

爬虫小案例:基于Bing关键词批量下载图片(第二版)

一、需求&#xff1a; 基于Bing网站&#xff0c;输入关键词&#xff0c;批量下载图片保存到本地 二、代码展示&#xff1a; import requests from lxml import etree import os from multiprocessing.dummy import Pool import json from time import time# 作用&#xff1a…

LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 DFS2.2 状态压缩DP265 / 3871&#xff0c; 前6.85% 前3题题解&#xff1a; LeetCode 5649. 解码异或后的数组&#xff08;位运算&#xff09;LeetCode 5652. 交换链表中的节点&#xff08;快慢指针&#xff09;LeetCode 5650. 执行交换操作后的最小…

运维工程师打怪升级进阶之路 V2.0

很多读者伙伴们反应总结的很系统、很全面&#xff0c;无论是0基础初学者&#xff0c;还是有基础的入门者&#xff0c;或者是有经验的职场运维工程师们&#xff0c;都反馈此系列文章非常不错&#xff01; 命名&#xff1a;《运维工程师打怪升级之路》 版本&#xff1a;V1.0版本…

win7优化设置_5项优化,至少提升20%!

Win7系统已经接近落幕的尾声了&#xff0c;不知大家是否早已做好准备了呢&#xff1f;很多朋友说win7不如win10好用&#xff0c;但马克思主义说到“新事物必将会取代旧事物”&#xff0c;也没必要一直坚守着win7的战线啦。自电脑升级了之后&#xff0c;便对win10系统进行了一些…

python实现两张图片横向和纵向拼接

本文实例为大家分享了python实现图片横向和纵向拼接的具体代码&#xff0c; 这里主要用Python扩展库pillow中Image对象的paste()方法把两张图片拼接起来供大家参考&#xff0c;具体内容如下&#xff1a; 一、代码&#xff1a; from PIL import Imagedef join(png1, png2, fl…

LeetCode 1203. 项目管理(两次拓扑排序)

文章目录1. 题目2. 解题1. 题目 公司共有 n 个项目和 m 个小组&#xff0c;每个项目要不无人接手&#xff0c;要不就由 m 个小组之一负责。 group[i] 表示第 i 个项目所属的小组&#xff0c;如果这个项目目前无人接手&#xff0c;那么 group[i] 就等于 -1。&#xff08;项目和…

BZOJ K大数查询(分治)(Zjoi2013)

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3110 Description 有N个位置&#xff0c;M个操作。操作有两种&#xff0c;每次操作如果是1 a b c的形式表示在第a个位置到第b个位置&#xff0c;每个位置加入一个数c如果是2 a b c形式&#xff0c;表示询…

为什么电脑不能打字_为什么不能用电脑验光仪测出来的度数直接配眼镜?

当今世界&#xff0c;科学技术爆炸式发展和进步&#xff0c;很多人问我&#xff1a;“电脑验光仪的准确度越来越高&#xff0c;会不会取代人工验光师&#xff1f;”我们这代人从小听着学着“科学技术是第一生产力”长大的&#xff0c;自然是技术崇拜者&#xff0c;自然的反应当…

前端DEMO:网络上流行的抖音罗盘

一、效果&#xff1a; 二、关于代码&#xff1a; CSS/demo.css代码&#xff1a; * {margin: 0;padding: 0; } html, body {width: 100%;height: 100%;background-color: black;overflow: hidden; } #clock {position: relative;width: 100%;height: 100%;background: black; }…