文章目录
1 概述
2 文件&文件夹
常用操作 文件 的方法:
1. open() 打开文件 -> close() 关闭文件
2. read() 读取文件 -> write() 写入文件
3. rename() 重命名文件
4. remove() 删除文件
常用操作 文件夹(目录) 的方法:
import os
1. os.mkdir() 在当前目录下创建新目录(若已存在,则报错) -> os.rmdir() 删除
2. os.chdir() 改变当前的目录
3. os.getcwd() 显示当前的目录
3 示例
3.1 查询
3.1.1 列出当前路径下所有的文件、文件夹
- 方法1:使用
os.listdir()
import os
path = r"C:\Users\wangyou\Desktop\1"
for fileName in os.listdir(path):
print(fileName)
- 方法2:使用
os.walk
(含所有文件夹及其)
import os
path = r"C:\Users\wangyou\Desktop\1"
for dirPath, dirNames, fileNames in os.walk(path):
print("文件路径:", dirPath)
print("文件夹名称:", dirNames)
print("文件名称:", fileNames)
print()
- 方法3:使用
glob.glob()
import glob
path = r"C:\Users\wangyou\Desktop\1"
# 打印当前目录下,所有以 ".txt" 结尾的文件
for fileName in glob.glob(path + r'\*.txt'):
print(fileName)
3.1.2 判断是文件还是文件夹
import os
path = r"C:\Users\wangyou\Desktop\1\1.sql"
if os.path.isdir(path): # 看这里
print("是目录:" + path)
elif os.path.isfile(path): # 看这里
print("是文件:" + path)
3.1.3 判断文件、文件夹是否存在
import os
path = r"C:\Users\wangyou\Desktop\1\1.sql"
if os.path.exists(path): # 看这里
print('存在:' + path)
else:
print('不存在:' + path)
3.1.4 打印文件夹下所有的文件
- 方法1:使用
os.walk()
,推荐
import os
def get_file_name(path):
for dirPath, dirNames, fileNames in os.walk(path):
print(dirPath) # 打印 "文件绝对路径"
for fileName in fileNames:
print(fileName) # 打印 "文件名"
print()
if __name__ == '__main__':
path = r"C:\Users\wangyou\Desktop\1"
get_file_name(path)
- 方法2:使用
os.listdir()
,递归查询
import os
def get_file_name(path):
v_file_flag = 0
file_names = []
dir_names = []
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
file_names.append(name) # 文件
else:
dir_names.append(name) # 文件夹
# 输出文件名称
for fileName in file_names:
if v_file_flag == 0:
print(path) # 输出文件路径
v_file_flag = 1
print(fileName)
# 若为 "文件夹",则递归查询
for dirName in dir_names:
print()
get_file_name(os.path.join(path, dirName))
if __name__ == '__main__':
path = r"C:\Users\wangyou\Desktop\1"
get_file_name(path)
3.1.5 列出文件的编码格式
import chardet
path = r'C:\Users\wangyou\Desktop\1'
full_file_name = path + r'\1.txt'
f = open(full_file_name, 'rb')
data = f.read()
f.close()
result = chardet.detect(data)
print(result)
测试结果:
{
'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}
参数说明:
1. 'encoding': 'utf-8' 表示检测到文件的编码格式为 "utf-8"
2. 'confidence': 0.7525 表示可信度为 75%
3. 'language': '' 表示文件内容的语言,如 "Chinese"、 "English"、"" 等
3.2 修改
3.2.1 批量修改文件名称
- 当前文件夹下
- 功能:将 文件(文件夹)名称中带有
"test"
的全部修改为"new"
import os
def file_rename(path, keyword_old_name, keyword__new_name):
"""
重命名文件
:param path: 文件绝对路径
:param keyword_old_name: 源文件,含有关键字 keyword_old_name
:param keyword__new_name: 替换后文件,含有关键字 keyword__new_name
"""
file_rename_count = 0
for fileName in os.listdir(path):
# 如果找到含有 keyword_old_name 的文件名,就替换
if fileName.find(keyword_old_name) >= 0:
full_old_name = path + os.sep + fileName
full_new_name = path + os.sep + fileName.replace(keyword_old_name, keyword__new_name)
os.rename(full_old_name, full_new_name)
print("之前的文件名:%s,之后的文件名:%s" % (full_old_name, full_new_name))
file_rename_count += 1
return file_rename_count
if __name__ == '__main__':
path = r'C:\Users\wangyou\Desktop\1'
file_rename_count = file_rename(path, 'test', 'new')
print("总共替换文件个数:", file_rename_count)
3.2.2 批量替换文件内容
import os
def read_file(file):
"""
读取文件
:param file: 文件绝对路径
:return: 文件内容
"""
with open(file, 'r', encoding='GBK') as f:
file_content = f.read()
return file_content
def write_file(file, data):
"""
写入文件
:param file: 文件绝对路径
:param data: 要写入的文件内容
"""
with open(file, 'w', encoding='GBK') as f:
f.write(data)
def replace_file(path, old_content, new_content):
"""
文件内容替换
:param path: 文件绝对路径
:param old_content: 替换前的内容
:param new_content: 替换后的内容
:return: 是否替换 1:已替换, 0:未替换
"""
content = read_file(path)
# 若可以找到,则替换
if content.find(old_content) >= 0:
content = content.replace(old_content, new_content)
write_file(path, content)
return '1' # 替换完成
else:
return '0' # 未替换
if __name__ == '__main__':
path = r'C:\Users\wangyou\Desktop\1'
old_content = '再来一次'
new_content = '哈哈哈哈'
for fileName in os.listdir(path):
# 绝对路径 os.seq -> '\\' (Windows 中的文件分割符)
full_file_name = path + os.sep + fileName
if os.path.isfile(full_file_name):
flag = replace_file(full_file_name, old_content, new_content)
if flag == '1':
print("已替换:", full_file_name)