↓ Skip to main content
  1. Tags/

Python

2026

为什么一个 Python Library 既要锁依赖,又不能锁依赖

·5605 words·12 mins
起因 # 最近在团队内部重新整理 Python 项目的打包、发布和依赖管理规范,逐渐把各个工程统一收敛到: 1pyproject.toml 2uv 3uv.lock 4wheel 5src layout 6internal package registry 在这个过程中,大家交流最多的往往是一些具体的工具用法:私有源怎么配、build backend 选哪一个、uv 的命令参数怎么写。但我越梳理越发现,这些工程细节很容易盖住一个更基础的问题:

2023

2018

爬虫学习笔记

·1182 words·3 mins
再次迫于生计。。。 参考了面向新人的 Python 爬虫学习资料 大致的学习路线为: 一: 简单的定向脚本爬虫( request — bs4 — re ) 二: 大型框架式爬虫( Scrapy 框架为主) 三:浏览器模拟爬虫 ( Mechanize 模拟 和 Selenium 模拟) 有 Python 基础和一点 html 基础的话,貌似上手是 0 难度的。

使用python计算误差代码

·126 words·1 min
import os 1import math 2ave_err=0.0 3max_err=0.0 4max_err_rate=0.0 5length=0 6with open("cpu_result.txt","r") as fp1, open("cuda_ppl_result.txt","r") as fp2: 7 for l1 in fp1: 8 l2 = fp2.readline() 9 l1=l1[:-2] 10 l2=l2[:-2] 11 lst = l1.split(' ') 12 lst2 = l2.split(' ') 13 #print lst 14 lst = [float(x) for x in lst ] 15 length = length + len(lst) 16 lst2 = [float(x) for x in lst2] 17 #print (lst) 18 #print (lst2) 19 20 for index,x in enumerate(lst): 21 y = lst2[index] 22 ave_err = ave_err + abs(x-y) 23 max_err = max(max_err,abs(x-y)) 24 max_err_rate = max(max_err_rate,abs(x-y)/x) 25 26 print("len=",length) 27 print("max_err=",max_err) 28 print("max_err_rate=",max_err_rate*100,"%") 29 print("ave_err=",ave_err/length) 需要提供两个文件,并且两个文件的数据格式相同。

pytorch 函数笔记

·701 words·2 mins
记录一些常用的…总去查文档也是有点麻烦 * tensor.view 的作用是reshape 比如 a = torch.range(1, 16) 得到一个tensor that has 16 elements from 1 to 16. 在a=a.view(4,4)就得到了一个44的tensor。 需要注意reshape之后元素的个数不能改变(16==44) 参数-1的作用是,我懒得算这一维度应该是多少,(由于元素个数不能改变)所以希望自动被计算。**需要注意的是,只有一个维度可以写-1。 **不过view和reshape有些区别:reshape always copies memory. view never copies memory # * torch.squeeze 将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B), squeeze(input, 0) 将会保持张量不变,只有用 squeeze(input, 1),形状会变成 (A×B)。注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。 # * torch.unsqueeze 返回一个新的张量,对输入的指定位置插入维度 1 注意: 返回张量与输入张量共享内存,所以改变其中一个的内容会改变另一个。如果dim为负,则将会被转化dim+input.dim()+1 # 1>>> x = torch.Tensor([1, 2, 3, 4]) 2>>> torch.unsqueeze(x, 0) 3 1 2 3 4 4[torch.FloatTensor of size 1x4] 5>>> torch.unsqueeze(x, 1) 6 1 7 2 8 3 9 4 10[torch.FloatTensor of size 4x1] 11 12 13 14 * tensor.expand(size) 扩展tensor.可以保持维度数目不变,每一维度的size增加(比如AB变到C*D,其中C>=A,D>=B).-1参数表示某一个维度的size不发生改变 . 有可以扩展tensor到更多的维度,新增加的维度会默认放在最前面,并且不能以-1作为参数。 # * tensor.contiguous 将一个tensor变成连续的。(一些ops如expand/expand_as会让tensor 不连续) #

2017

正则匹配中文及常用正则表达式 (转载)

·1078 words·3 mins
先放一个同事安利给我的网站:regex101 查询匹配的中文字符unicode编码 正则表达式用于字符串处理、表单验证、日志数据分析等场合,实用高效。现将自己走网上搜索并总结的常用方法收集了一下: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 注:匹配中文还真是个头疼的事,有了这个表达式就好办了

python只获取当前目录下的文件夹及文件名

·237 words·1 min
list = os.listdir(rootdir)#列出目录下的所有文件和目录 1for line in list: 2 filepath = os.path.join(rootdir,line) 3 if os.path.isdir(filepath):#如果filepath是目录 4 print "dir:" + filepath 5 else: 6 print "file:" + filepath 如果需要遍历文件夹下的所以文件,可以使用os.walk()方法。

python numpy 用法 简明手册

·8276 words·17 mins
原文链接 感谢stanford,感谢原作者的翻译,我调整了一下代码格式,可以当做手册来用了,毕竟之前没怎么写过py 23333 译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译。本篇教程由杜客翻译完成,Flood Sung、SunisDown、巩子嘉和一位不愿透露ID的知友对本翻译亦有贡献。

libgfortran.so.4 missing under archlinux

·919 words·2 mins
。。。哭了哦,终于解决了这个 bug 参考资料: libgfortran broken? libgfortran=3.0 should not be install with numpy <= 1.9 [SOLVED] libgfortran.so.3:cannot open shared object file: No such file [Replacing gcc-libs-libs with gcc-multilib arch conflict with gcc-libs and gcc-libs-multilib on latest update 一开始以为是 anaconda 相关,搞了半天。 然后又按照第一个资料里说的,试图把 libgfortran 用 libgcc 替代。

conda升级anaconda ValueError的解决办法

·121 words·1 min
conda update anaconda 后提示 1ValueError: unsupported format character ')' (0x29) at index 49 查到了这个:anaconda update issue I have narrowed this down to the following packages: package build psutil-1.2.1 py27_0 hard-link pycparser-2.10 py27_0 hard-link pykit-0.1.0 np18py27_2 hard-link pyparsing-2.0.1 py27_0 hard-link by calling "conda install anaconda" and then successfully installing everything else one at a time. These four packages consistently exhibit the described behaviour. (note: pykit depends on pycparser so may itself be ok - can't tell) 我先把psutil卸载掉,重新update了一下,成功。

vim下python 的配置

·817 words·2 mins
由于最近要做数字图像处理的大作业,以及之后一段时间,估计写python多一些,所以打算花些时间配置下vim. # 1. 一键执行 # 其实之前一直有的。。不过没有效果,就没有管。发现问题是,python对应的filetype为"python",而不是"py" # 1func! CompileRunGcc() 2 exec "w" 3 if &filetype == 'c' 4 exec "!g++ % -o %<" 5 exec "! ./%<" 6 elseif &filetype == 'cpp' 7 exec "!g++ % -std=gnu++11 -Wall -o %<" 8 exec "! ./%<" 9 elseif &filetype == 'java' 10 exec "!javac %" 11 exec "!java %<" 12 elseif &filetype == 'sh' 13 :!./% 14 elseif &filetype == 'python' 15 " exec "!python %" 16 " exec "!python %<" 17 exec "!python2.7 %" 18 endif 19endfunc 2.代码补全 # 不想折腾了。。既然ycm也支持python,就先用用看好了。。不行再换别的。 # 放一段ycm for python的配置文件 # 1"默认配置文件路径" 2let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' 3"打开vim时不再询问是否加载ycm_extra_conf.py配置" 4let g:ycm_confirm_extra_conf=0 5set completeopt=longest,menu 6"python解释器路径" 7let g:ycm_path_to_python_interpreter='/usr/bin/python' 8"是否开启语义补全" 9let g:ycm_seed_identifiers_with_syntax=1 10"是否在注释中也开启补全" 11let g:ycm_complete_in_comments=1 12let g:ycm_collect_identifiers_from_comments_and_strings = 0 13"开始补全的字符数" 14let g:ycm_min_num_of_chars_for_completion=2 15"补全后自动关机预览窗口" 16let g:ycm_autoclose_preview_window_after_completion=1 17" 禁止缓存匹配项,每次都重新生成匹配项" 18let g:ycm_cache_omnifunc=0 19"字符串中也开启补全" 20let g:ycm_complete_in_strings = 1 3. 语法检查 # Syntastic大家都知道了。。。。看到了异步检测插件ALE,打算试一下。 # ale_github # 需要注意的是,这个插件需要vim 8.0+的特性。。。 # 放一波配置文件 # 1""""""""""""""""""for ale begin """""""""""""""" 2let g:ale_sign_column_always = 1 "保持侧边栏可见: 3 4let g:ale_sign_error = '>>' "改变错误和警告标识符 5let g:ale_sign_warning = '--' 6let g:ale_statusline_format = ['⨉ %d', '⚠ %d', '⬥ ok'] "改变状态栏信息格式 7 8"自定义跳转错误行快捷键: 9nmap <silent> <C-k> <Plug>(ale_previous_wrap) 10nmap <silent> <C-j> <Plug>(ale_next_wrap) 11"消除某excption not caught的警告 12let g:ale_emit_conflict_warnings = 0 4. 编程提示(jedi-vim) # 据说是vim写python的神器。。。装来看看。。。 # 据说默认配置就够了,先不折腾了 # # #