Python笔记1.2(with open() as file和open()、logging、os、shutil、glob、decode和encode)

Python笔记1.1(字符串日期转换、argparse、sys、overwrite、eval、json.dumpsloads、os.system(cmd)、zfill、endswith、深浅拷贝)

Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)

Python笔记1.2

    • 13、with open() as file和open()参数详解
    • 14、logging
      • 日志的等级
      • logging.basicConfig(\*kwargs)
      • format
    • 15、os、shutil、glob
      • os
      • shutil
      • glob
      • 查找指定的文件
      • 查找含有指定文件的内容
      • 批量修改目录中的文件名称
      • 批量查找并复制备份py脚本
    • 16、decode和encode

13、with open() as file和open()参数详解

with open() as file: 是 Python 中用于打开文件的语法结构。

  • withas 是 Python 的关键字,用于创建一个上下文环境,确保在离开该环境时资源能够被正确关闭或释放。
  • open() 是一个内置函数,用于打开文件并返回一个文件对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

open() 函数的各个参数的详细解释:

  1. file:要打开的文件名(或文件路径)。可以是相对路径或绝对路径。

  2. mode(可选):打开文件的模式。它是一个字符串参数,默认值为 'r'(只读模式)。常用的打开模式包括:

    • 'r':只读模式。文件从开头位置开始读取,默认模式。
    • 'w':写入模式。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件进行写入。
    • 'x':独占创建模式。只写模式,用于创建新文件。如果文件已存在,则抛出 FileExistsError 异常。
    • 'a':追加模式。文件从末尾位置开始写入,如果文件不存在,则创建新文件。
    • 'b':二进制模式。以二进制形式读取或写入文件,用于处理非文本文件。
    • 't':文本模式(默认)。以文本形式读取或写入文件,用于处理文本文件。
  3. buffering(可选):指定文件的缓冲策略。可以为整数值来指定缓冲区大小,或者使用 -1(默认值)来选择默认的缓冲机制。

  4. encoding(可选):指定文件的编码格式。例如,'utf-8''latin-1' 等。如果不指定该参数,在文本模式下将使用系统默认编码。

  5. errors(可选):指定编解码错误的处理方式。默认值为 None,表示使用默认的错误处理机制。

  6. newline(可选):指定用于文本模式下换行符的转换方式。可以是 None(默认值,保持系统默认),''(不进行转换),'\n'(将换行符转换为 \n),'\r'(将换行符转换为 \r)等。

  7. closefd(可选):定义当文件对象关闭时是否关闭与文件描述符相关的底层文件。默认值为 True,表示关闭文件。

  8. opener(可选):用于自定义打开文件的底层实现的函数。

读写

# 1. 打开⽂件   f:file文件的缩写
f = open('test.txt', 'w')
# 2.⽂件写⼊
f.write('hello world')
# 3. 关闭⽂件
f.close()
  • writelines():写入的必须是列表类型。
  • readlines():可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
  • readline():一次读取一行内容。

14、logging

日志的等级

日志级别使用场景
DEBUG用于调试阶段,输出详细的调试信息,通常不会在生产环境中使用
INFO用于输出程序运行的一般信息,例如程序启动、停止等
WARNING用于输出警告信息,例如程序运行时出现了一些不严重的问题,但需要引起注意
ERROR用于输出错误信息,例如程序运行时出现了一些严重的问题,需要及时处理
CRITICAL用于输出严重的错误信息,例如程序崩溃、系统崩溃等,需要立即处理

logging.basicConfig(*kwargs)

参数名称描述
filename指定日志输出目标文件的文件名,指定该参数后日志信息就不会输出到控制台上
filemode指定日志文件的打开模式,默认为’a’.需要注意的是,该选项要在filename被指定时才有效
format指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序
datefmt指定日志记录中日期和时间的格式,该选项要在format中包含时间字段%(asctime)s时才有效
level指定日志器的日志级别,小于该级别将不会输出
stream指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常
style指定format格式字符串的风格,可取值为’%‘、’{‘和’$‘,默认为’%’

format

字段/属性名称使用格式描述
asctime%(asctime)s日志事件发生的事时间
levelname%(levelname)s该日志记录的文字形式的日志级别(‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)
message%(message)s日志记录的文本内容,通过 msg % args计算得到的
pathname%(pathname)s调用日志记录函数的源码文件的全路径
filename%(filename)spathname的文件名部分,包含文件后缀
module%(module)sfilename的名称部分,不包含后缀
lineno%(lineno)d调用日志记录函数的源代码所在的行号
funcName%(funcName)s调用日志记录函数的函数名
import logging

# 1、创建一个logger
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)

# 2、创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log')
fh.setLevel(logging.DEBUG)

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# 3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 4、给handler添加formatter
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 5、给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)

15、os、shutil、glob

os

在这里插入图片描述
返回上一层路径
os.path.abspath(os.path.join(path, os.paridr))

shutil

在这里插入图片描述

glob

在这里插入图片描述

查找指定的文件

想查找的文件名已知道,但目录在哪里不知道

# coding:utf-8

import glob

path = glob.os.path.join(glob.os.getcwd(), '*')

# 获取当前路径下所有内容
# 判断每个内容的类型(文件夹还是文件)
# 递归


final_result = []

def search(path, target):
    result = glob.glob(path)

    for data in result:
        if glob.os.path.isdir(data):
            _path = glob.os.path.join(data, '*')
            search(_path, target)
        else:
            if target in data:
                final_result.append(data)
    return final_result


# /home/test1.py   if test1 in /test1/abc.py

if __name__ == '__main__':
    result = search(path, target='test1')
    print(result)

查找含有指定文件的内容

文件中包含某些关键字,但不知道文件名和所在路径

# coding:utf-8

import glob

path = glob.os.path.join(glob.os.getcwd(), '*')

# 获取当前路径下所有内容
# 判断每个内容的类型(文件夹还是文件)
# 递归

final_result = []

def search(path, target):
    result =  glob.glob(path)

    for data in result:
        if glob.os.path.isdir(data):
            _path = glob.os.path.join(data, '*')
            print('path is %s' % _path)
            search(_path, target)
        else:
            f = open(data, 'r')
            try:
                content = f.read()
                if target in content:
                    final_result.append(data)
            except:
                print('data read failed: %s' % data)
                continue
            finally:
                f.close()

    return final_result


if __name__ == '__main__':
    result = search(path, target='dewei')
    print(result)

批量修改目录中的文件名称

知道文件名需要修改的字符串

# coding:utf-8

import glob
import shutil

def update_name(path):
    result = glob.glob(path)

    for index, data in enumerate(result):
        if glob.os.path.isdir(data):
            _path = glob.os.path.join(data, '*')
            update_name(_path)
        else:
            path_list = glob.os.path.split(data)
            # [/home/xxxx, name.txt]
            name = path_list[-1]
            new_name = '%s_%s' % (index, name) # '0_name.txt'
            new_data = glob.os.path.join(path_list[0], new_name)
            shutil.move(data, new_data)

if __name__ == '__main__':
    path = glob.os.path.join(glob.os.getcwd(), '*')
    update_name(path)

批量查找并复制备份py脚本

import os
import shutil
import datetime

ymd = datetime.datetime.now().strftime("%Y%m%d")
# 工作目录路径
work_dir = os.getcwd()

# 递归遍历所有子目录,查找Python程序文件
for foldername, subfolders, filenames in os.walk(work_dir):
    for filename in filenames:
        if filename.endswith('.py'):
            path_py = os.path.join(foldername, filename)
            print(os.path.join(foldername, filename))
            new_path = os.path.join(r"D:\beifen\py_{}\{}".format(ymd, path_py.split('Project\\')[1]))
            if not os.path.exists(new_path):
                os.makedirs(new_path)
            if not os.path.exists(r"D:\beifen\py_{}\{}".format(ymd, path_py.split('Project')[1])):
                shutil.copy(os.path.join(foldername, filename), new_path)
            # exit()  

16、decode和encode

在 Python 中,字符串是以 Unicode 编码进行存储和操作的。Unicode 是一种字符集,为每个字符分配了唯一的数字编码,可以用于表示所有的字符集(包括 ASCII,拉丁文和其他字符集)。

在 Python 中,有两种主要的方法来将字符串转换为字节序列(编码)或将字节序列转换为字符串(解码):.encode().decode()

.encode() 方法将字符串转换为字节序列,方法调用需要指定要使用的编码方式。例如,.encode('utf-8') 将字符串编码为以 UTF-8 编码的字节序列。返回一个 bytes 对象。

示例:

string = '这是一段中文字符'
encoded_string = string.encode('utf-8')
print(encoded_string)

输出:b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe6\xae\xb5\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'

.decode() 方法将字节序列转换为字符串,调用需要指定要使用的编码方式。例如,.decode('utf-8') 将以 UTF-8 编码的字节序列转换为字符串。返回一个字符串。

示例:

bytes_string = b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe6\xae\xb5\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'
decoded_string = bytes_string.decode('utf-8')
print(decoded_string)

输出:这是一段中文字符

需要注意的是,调用 .encode().decode() 时需要指定相应的编码方式。不同的编码方式可能在字符编码转换上存在差异,使用不当可能导致数据损坏或解码错误。

另外,Python 中的 .encode().decode() 方法只适用于 Python 字符串和字节序列之间的转换。如果要进行文件读写等操作,需要使用相应的文件读写方法。例如使用 open() 函数时,需要指定相应的模式。例如 open('file.txt', 'w', encoding='utf-8') 表示使用 UTF-8 编码打开文件以进行写操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额(Quota)的应用与实作 Quota 的一般用途: 针对 www server ,例如:每个人的网页空间的容量限制; 针对 mail server,例如:每个人的邮件空间限制。 针对 file server,例如:每个人最大的可用…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战 常用的命令 Scrapy是一个用于爬取网站数据的Python框架,以下是一些常用的Scrapy命令: 开始的时候 用 cd 进入你想创建scrapy 的文件夹 &a…

Java中各种数据类型之间的转换

低类型向高类型自动进行转换,高类型向低类型的准换会丢失数据,整数到字符类型的转换将获取对应编码的字符。 进行高精度向低精度的强制类型准换时,需要将想要转换成的数据类型加一个括号()。 如何完成自动转换呢? 转换前的数据类…

Linux 下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器: 管理服务器节点服务器托管服务器 示例和关系如下图: 对应三类服务器, 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…

系统地自学 Python

文章目录 如何系统地自学 Python1. 选择合适的 Python 版本2. 安装 Python 和必要的工具3. 学习 Python 的基础知识4. 学习 Python 的高级特性5. Python 的应用领域6. 保持良好的学习习惯 如何系统地自学 Python Python 是一种广泛使用的编程语言,它具有简洁、易读、…

微服务的应用架构

架构描述的是在更高层次将应用拆分为子系统或模块的方法,以及这些子系统之间的交互关系。在一个基于微服务架构构建的应用中,每个服务都需要有自己的架构。 事实上,单体应用在复杂度较低时,它的生产效率是要高于微服务的。只有在…

【Go语言 map源码分析】

map底层数据结构 我们在之前学习C中的map时知道了 map的底层其实是有两种数据结构 这取决于我们要求它有序还是无序 如果说我们要求map是有序的它的底层数据结构就是红黑树如果说我们要求map是无序的它的底层数据结构就是哈希表 但是Go语言中的map数据结构有点特殊 如下图 …

QueryRunner报红处理

如图,有同学反映QueryRunner报红,就是没有导包 自己去找项目的地址,找到web文件夹下的WEB-INF 把这些jar包都粘贴进去,以后项目基本都会用到的,资源自己去找 粘贴好后打开文件的Project Structure 点击Dependencies 点…

github打不开,全网最简单解决方法,没有之一

下载watt toolkit, 选择‘github’,点击‘一键加速’, 具体步骤如下:去电脑微软商店下载watt toolkit,或者直接打开网址https://apps.microsoft.com/detail/9MTCFHS560NG?hlen-us&glUS 如图,点击安装i…

洛谷 B2006 地球人口承载力估计 C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址:地球人口承载力估计 - 洛谷 题目: 思路点拨 经典牛吃草问题。 解设一个人一年吃一份草。 则x*a-y*b为会多出的草,为什么会多呢?是因为每年都有…

Vue3-路由

VueRouter4路由语法解析 1.创建路由实例由createRouter实现 2.路由模式 1)history模式使用createWebHistory():地址栏不带# 2)hash模式使用createWebHashHistory():地址栏带# 3)参数是基础路径,默认/ …

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

弦理论的技术探索

弦理论的技术探索 一、引言 弦理论,作为现代物理学中的一个重要分支,旨在揭示宇宙的终极规律。它认为,宇宙中的一切物质和能量都是由微小的弦振动产生的。本文将深入探讨弦理论的技术层面,包括其数学基础、物理应用以及计算机模拟等方面。 二、弦理论的数学基础 弦理论的…

【Delphi】中使用Indy进行UDP广播通信

目录 一、服务器端(接收端) 二、客户端(广播端) Delphi中进行UDP广播通信函数代码: 一、服务器端(接收端) 在主界面上返放置一个TIdUDPServer控件,设置好该控件的监听端口&#…

C++笔试训练day_1

文章目录 选择题编程题 选择题 编程题 #include <iostream> #include <algorithm> #include <vector>using namespace std;int main() {int n 0;cin >> n;vector<int> v;v.resize(3 * n);int x 0;for(int i 0; i < v.size(); i){cin >&…

94基于matlab的蚁群算法 (ACO) 对付的图像边缘检测问题

基于matlab的蚁群算法 (ACO) 对付的图像边缘检测问题。提出基于蚁群算法的边缘检测方法是能够建立一个信息素矩阵表示提出了一种在图像每个像素位置的边缘信息根据大量的蚂蚁的运动有哪些派去在图像上移动。此外&#xff0c;运动这些蚂蚁是由图像的局部变化驱动强度值。数据可更…

什么是Anaconda

Anaconda的安装也很方便。打开这个网站Anaconda下载&#xff0c;然后安装即可。 Anaconda可以帮助我们解决团队之间合作的包依赖管理问题。在没有使用Anaconda之前&#xff0c;如果你的Python程序想让你的同事运行&#xff0c;那么你的同事可能会遇到很多包依赖问题&#xff0…

调优--学习笔记

1&#xff0c;Presto调优 数据存储格式 1&#xff09;合理设置分区 与Hive类似&#xff0c;Presto会根据元信息读取分区数据&#xff0c;合理的分区能减少Presto数据读取量&#xff0c;提升查询性能。 2&#xff09;使用列式存储 Presto对ORC文件读取做了特定优化&#xff0c…

【Python】tensorflow学习的个人纪录(2)

actor.learn(s, a, td_error)def learn(self, s, a, td):s s[np.newaxis, :]feed_dict {self.s: s, self.a: a, self.td_error: td}_, exp_v self.sess.run([self.train_op, self.exp_v], feed_dict)return exp_v输入变量的数值&#xff1a; 步进&#xff1a; []---->[…

ER图是什么,怎么画?

ER图&#xff08;Entity-Relationship Diagram&#xff09;是一种用于描述实体间关系的图形化表示方法。它主要用于数据库设计&#xff0c;可以清晰地展示实体、属性和实体间的联系。常用的ER图类型包括&#xff1a; 实体-关系模型&#xff08;Entity-Relationship Model&…