前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python小抄

python小抄

作者头像
孔西皮
发布2024-02-07 08:13:35
1140
发布2024-02-07 08:13:35
举报
文章被收录于专栏:前行的CVer前行的CVer

这篇文章中包含了基础python中的常用代码小抄,包括:

  • python中文件的按顺序列出;
  • 写入、写出txt,json和pkl、移动文件的常用代码;
  • 常用正则表达;
  • 进程池的示例代码。

按顺序列出文件

在os.path相关使用中,我们可以看到有几个关于获取文件时间的函数:

os.path.getctime():获取文件创建(create)时间 os.path.getatime():获取文件最近访问(access)时间 os.path.getmtime():获取文件最近修改(modify)时间

代码语言:javascript
复制
import os

dir_name = "./tmp"

file_list = os.listdir(dir_name)
# 获取按照文件时间创建排序的列表,默认是按时间升序
new_file_list = sorted(file_list, key=lambda file: os.path.getctime(os.path.join(dir_name, file)))

文件写入写出移动

1. txt

numpy数组写入到txt

代码语言:javascript
复制
g = np.array([1,2,3])
np.savetxt(path, np.c_[g], fmt='%d', delimiter=',')

# or
with open(path,'w') as f: 
    np.savetxt(f, np.c_[g], fmt='%d', delimiter=',')

读取到列表

代码语言:javascript
复制
# 方法一
with open("train.txt", 'r') as f:
    img_name = [x.strip() for x in f]
# 方法二
with open("train.txt", 'r', encoding='utf-8') as f:
    lines = f.readlines()

列表写入txt

代码语言:javascript
复制
# 如果filename不存在会自动创建, 'w'表示写数据,写之前会清空文件中的原有数据!
filename = "info.txt"
l=["A","B","C","D"]
with open(filename,'w') as f: 
    f.writelines(l)

# 如果要格式化输出列表的内容,需要把原来的数据转化为字符串组成的列表,再用上述方法写入
data = [[1,2][3,4]]
l = []
for i in range(len(data)):
    l.append(','.join([str(data[i][0]), str(data[i][1]), '\n']))

2. json

json 模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads()。

json.dumps将一个Python数据结构转换为JSON:

代码语言:javascript
复制
import json
data = {
    'name' : 'myname',
    'age' : 100,
}
json_str = json.dumps(data)

json.loads将一个JSON编码的字符串转换回一个Python数据结构:

代码语言:javascript
复制
data = json.loads(json_str)

而json.dump() 和 json.load() 来编码和解码JSON数据,用于处理文件。

json.dump(json_dict, f, indent=4)可以增加缩进效果

代码语言:javascript
复制
with open('test.json', 'w') as f:
    json.dump(data, f)
with open('test.json', 'r') as f:
    data = json.load(f) 

3. 序列化文件

代码语言:javascript
复制
import pickle
with open('a.pkl', 'rb') as f:
    a = pickle.load(f)

with open(path_i, 'wb') as f:
    pickle.dump((train_tasks[i], test_tasks[i]), f)

4. 移动、删除、复制文件夹

代码语言:javascript
复制
import shutil

if os.path.exists(target_path):
    shutil.rmtree(target_path)

# 复制和移动文件,如果目的文件夹不存在,或者要复制和移动的文件不存在,则都会报错。
# 如果同名文件存在,文件可以成功复制,并覆盖目标文件。而移动文件的话,同名文件存在,则报错。
shutil.move('file1.txt','新的文件夹')
shutil.move('file2.txt','新的文件夹/new2.txt')
shutil.copy('demo.txt','新的文件夹')
shutil.copy('demo.txt','新的文件夹/new1.txt')
# 复制文件夹,目标路径下有同名文件夹,会报错。
shutil.copytree('要复制的文件夹', '目的文件夹/要复制的文件夹')
shutil.copytree('要复制的文件夹', '目的文件夹/新文件夹')

正则表达式(youtube 视频讲解):

推荐的测试页面:https://regex101.com/

  • 限定符:前面的字符出现0次或1次?, 匹配0个或多个前面的字符*, 前面的字符出现1次或多次+
  • 括号的区别:用()扩起需要匹配的字符串, 输入匹配次数的范围用{}, 匹配字符集合用[]
  • 常用元字符:数字字符\d, 单词字符(英文、数字、下划线)\w, 空白符(空格、Tab、换行)\s,对应的大写\D为非数字字符, \W为非单词字符, \S为非空白符。.代表不包括换行符的任意字符,\b标柱字符的边界。^匹配行首, $匹配行尾。
  • 贪婪匹配与懒惰匹配:例如<.+>与<.+?>
简单正则表达
简单正则表达

多进程与进程池

代码语言:javascript
复制
import os
import argparse
from multiprocessing import Pool

@staticmethod
def err_call_back(err):
    print(f'出错啦~ error:{str(err)}')

def split_list(lst, n):
    """Split a list into n (roughly) equal-sized chunks"""
    chunk_size = math.ceil(len(lst) / n)  # integer division
    return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)]


def get_chunk(lst, n, k):
    chunks = split_list(lst, n)
    return chunks[k]

def run_demo(chunk_id, num_chunks, args):
    pages = os.listdir(root_path)
    pages.sort()
    pages_chunk = get_chunk(pages, num_chunks, chunk_id)

    for page in pages_chunk:
        # do your code


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--num-chunks", type=int, default=8)
    args = parser.parse_args()

    num_chunks = args.num_chunks

    with Pool(num_chunks) as p:
        for i in range(num_chunks):
            chunk_id = i
            p.apply_async(run_demo, (chunk_id, num_chunks), error_callback=err_call_back)
        p.close()
        p.join()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 按顺序列出文件
  • 文件写入写出移动
    • 1. txt
      • 2. json
        • 3. 序列化文件
          • 4. 移动、删除、复制文件夹
          • 正则表达式(youtube 视频讲解):
          • 多进程与进程池
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档