Python 文件详解(File)

1 概述

2 文件&文件夹

菜鸟教程 – 文件 I/O 详解

常用操作 文件 的方法:

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)

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/108530617
今日推荐