一、文件操作
我们学习了linux后知道了在linux中,一切皆文件。那么在python中也有相应的文件操作。
文件的打开
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据。
"""
是否有读权限? 是否有写权限? 文件不存在,是否会创建文件? 文件操作会清空文件内容么?
r yes no no no
w no yes yes yes
a no yes yes no
w+ yes yes yes yes
a+ yes yes yes no
r+ yes yes no no
f = open('doc/passwd', 'w')
print(f.mode)
print(f.read())
"""
文件操作的基本方法:
文件打开后一定要记得关闭,因在系统中允许打开的文件数量有限。会占用系统资源。
f.close()
with语句工作原理
在with语句结束后,它会自动帮我们关闭文件,释放资源。
用文件操作实现文件的备份
import os
def copy(source_file, dst_file):
"""
实现拷贝文件的操作
"""
if os.path.exists(source_file):
# 将源文件的内容读出来
f = open(source_file)
content = f.read()
f.close()
# 写入目标文件
dst_f = open(dst_file, 'w')
dst_f.write(content)
dst_f.close()
print("拷贝%s为%s成功" %(source_file, dst_file))
else:
print("源文件%s不存在" %(source_file))
copy('/etc/passwd', 'doc/passwd-备份')
二、os模块的应用
os,语义为操作系统,处理操作系统相关的功能,可跨平台。 比如显示当前目录下所有文件/删除某个文件/获取文件大小等等一系列操作。
os模块的具体应同实例
题目需求:
1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
具体实现如下:
这里我们需要先做一个随机生成验证码的函数作为我们所要修改的文件名。
import string
import random
import os
def generate_code(length=4):
"""
默认生成4位验证码: 由两个大写字母,一个小写字母和一个数字组成;
:param length:
:return:
"""
# 从某个序列里面随机获取几个元素;
# code_li = random.sample(string.ascii_letters + string.digits, length)
code_li = random.sample(string.ascii_uppercase, 2) + random.sample(string.ascii_lowercase, 1) \
+ random.sample(string.digits, 1)
# 将生成的验证码顺序打乱;
random.shuffle(code_li)
# 将列表拼接成字符串
return "".join(code_li)
def create_files():
dirname = 'img'
if not os.path.exists(dirname):
os.mkdir(dirname)
print("目录%s创建成功" %(dirname))
# 循环100次,创建100个文件
for count in range(100):
# 随机生成文件名
filename = generate_code() + '.png'
full_filename = os.path.join(dirname, filename )
os.mknod(full_filename)
print("%s创建成功" %(full_filename))
create_files()
好了,现在我们创建好了以 '.png’为后缀的文件,下面就可以开始批量修改文件名了
具体代码实现:
import os
def modify_suffix(dirname, old_suffix, new_suffix):
"""
批量修改文件名
:param dirname: 操作的目录
:param old_suffix: 原先的后缀名
:param new_suffix: 新的后缀名
:return:
"""
# 0-1).判断源后缀名是否以点开头, 如果不是,则添加;
if not old_suffix.startswith('.'):
old_suffix = '.' + old_suffix
# 0-2). 判断新的后缀名是否以点开头, 如果不是,则添加;
if not new_suffix.startswith('.'):
new_suffix = '.' + new_suffix
# 1. 判断查找的目录是否存在, 如果不存在, 显示报错
if not os.path.exists(dirname):
print("Error: 目录%s不存在" % (dirname))
# 2. 如果文件存在,做如下操作:
else:
# 2-1). 列出指定目录的所有文件名;
filenames = os.listdir(dirname)
# 2-2). 依次遍历目录的每一个文件;
for filename in filenames:
# 2-3). 如果文件是以old_suffix结尾,则对改文件重命名;
if filename.endswith(old_suffix):
# 修改后缀名
# 2-3-1). 将后缀名和文件名本身分隔开; hello.png === hello .png, 并生成新的文件名
new_filename = os.path.splitext(filename)[0] + new_suffix
full_old_filename = os.path.join(dirname, filename)
full_new_filename = os.path.join(dirname, new_filename)
# 2-3-2). 重命名
os.rename(full_old_filename, full_new_filename)
print("重命名【%s】 为【%s】成功!" % (filename, new_filename))
modify_suffix('img', '.png', '.jpg')
运行代码我们就可以得到以下结果: