加班到凌晨三点改完第八版需求,第二天发现产品经理把需求改回第一版。这种日子我过了三年,后来我学会用Python把重复劳动砍掉百分之八十。今天直接把压箱底的操作掏出来,能帮你省一小时是一小时。
文件处理是加班重灾区,先从这里开刀。用pathlib代替os.path拼接路径,代码短一半还不会出错。读Excel别再遍历单元格,pandas.read_excel()一行全搞定。批量改文件名用os.rename()配合列表推导式,几百个文件秒完事。
你还在手动给数据去重吗。set()直接解决,顺序乱了就加个dict.fromkeys()。合并多个DataFrame用pd.concat()比循环append快十倍。处理CSV文件时,csv.DictReader能让你直接按列名取值,不用记索引位置。
正则表达式是清洗数据的瑞士军刀。re.sub()替换乱七八糟的字符,re.findall()提取电话号码和邮箱。写一段pattern = r'\d{11}',手机号全捞出来。别背语法,用regex101.com在线测试,比翻书快。
最烦那种每天上午九点发来的报表。用schedule库挂个定时任务,schedule.every().day.at('09:00').do(job),到点自动跑脚本发邮件。别再手动点发送了,手会酸。
处理PDF表格的时候,camelot库比pdfplumber准确率高,就是安装麻烦点。tabula-py直接读PDF里的表格,输出成DataFrame,省去截图再录入的蠢办法。
Excel公式不会写?直接用Python算。要算一列的平均值,df['列名'].mean()就完事。条件求和用df.loc[df['销售额']>10000, '利润'].sum()。别打开Excel去拉公式了,眼睛疼。
多个Sheet要合并成一个表,pd.concat(pd.read_excel(file, sheet_name=None).values())两行代码。新来的同事还在手动复制粘贴,你这边咖啡都没凉。
文件重命名要加日期前缀。os.rename(f, f'{datetime.date.today()}_{f}')一步到位。每周五要发的周报,提前把模板用jinja2渲染好,替换几个变量就出结果。
处理日志文件时,defaultdict(list)按关键字归类,比手动建字典省一半代码。用Counter统计高频词,比collections里的其他办法快。读大文件别用read()会爆内存,用with open() as f: for line in f流式读取。
数据库操作别写裸SQL,用pandas直接关联。pd.merge(df1, df2, on='id')搞定两个表的join操作。写pd.to_sql()一键把DataFrame写进数据库,不用手动拼接insert语句。
批量发送邮件时,yagmail库比smtplib简单太多。注册一个dummy账号,yagmail.SMTP(user, password)连密码都不用输。带附件用yag.send(to, subject, contents, attachments)。
你每天复制粘贴几十行数据到网页系统里,用pyautogui模拟键盘鼠标操作。pyautogui.typewrite('内容')自动输入,pyautogui.click(x, y)自动点击。录一次操作步骤,以后全靠脚本跑。
代码写多了记不住函数名,用help()查文档。dir(pandas)列出所有可用方法。比你去百度搜快,还不会点进广告网站。
调试脚本的时候别用print了。用logging.info()记录关键步骤,出错时看日志排查。设置logging.basicConfig(level=logging.DEBUG)能看到所有报错细节。print输出刷屏,找错误像大海捞针。
压缩文件解压用zipfile库,一行with zipfile.ZipFile('文件.zip', 'r') as z: z.extractall()搞定。不用装解压软件,Python全包。
批量调整图片大小用PIL库。img.thumbnail((宽度, 高度))保持比例缩放。加个logo水印,img.paste(logo, 位置)三行代码解决。别让设计帮你一张张P图了。
处理JSON数据时,json.loads()解析字符串,json.dumps()输出时加上ensure_ascii=False参数,中文不会变成转义字符。pprint模块能格式化打印嵌套字典,看得清楚结构。
爬个小网站用requests加BeautifulSoup,soup.find_all('div', class_='内容')提取数据。别用selenium去爬静态页面,速度慢还吃内存。学会用浏览器的开发者工具看network请求,直接调接口更稳定。
命令行操作用argparse加参数。脚本写成python 脚本.py --开始日期 2024-01-01 --结束日期 2024-12-31,不用改代码就能复用。每天同事求你改日期格式,烦死了。
处理时间序列数据,pd.to_datetime()转换格式,df.set_index('日期')设为索引。df.resample('M').sum()按月汇总,比Excel透视表快得多。
多个工作簿要汇总,用glob.glob('.xlsx')匹配所有文件,循环读入再pd.concat()。手动把十几个Excel表格复制粘贴,弄到下班都完不成。
写报表的时候,df.to_excel(writer, sheet_name='数据')加个sheet_name参数,一个工作簿里放多个Sheet。再配个pd.ExcelWriter,设置好格式把数据填进去,完美复刻公司报表模板。
字符编码问题老出错,读写文件时加上encoding='utf-8'参数,少踩一半坑。errors='ignore'遇到乱码直接跳过,不中断程序。
批量操作文件夹时用os.walk()递归遍历所有子目录。打印每个文件的路径,配合条件判断筛出要处理的文件。比os.listdir()强太多,不用手动一层层进目录。
平时用的临时脚本,直接写个函数套函数,不要搞类了。程序复杂再上类,简单任务用函数省事。别过度设计,加班够多了,别给自己加戏。
处理列表里的重复元素,list(set(原列表))秒去重。但要保持顺序就用list(dict.fromkeys(原列表))。看到新同事在用循环先判断再append,我默默把这段代码贴给他。
解析HTML表格用pandas.read_html()。一行返回DataFrame列表,比正则表达式提取干净利落。网上找数据表直接这个函数,不用写爬虫。
调试SQL语句时,把代码用pd.read_sql_query跑一遍,返回DataFrame直接看结果。报错信息比数据库客户端清楚,还能用df.head()快速预览前五行。
写自动化测试的时候,pytest框架比写一堆if语句高效。@pytest.mark.parametrize参数化测试数据,一组数据跑一遍全部用例。省得改一个数字就重新跑一遍。
临时要生成假数据测试,用faker库。fake.name()造人名,fake.phone_number()造手机号。省得手动编造几百条测试数据,累得手指头抽筋。
批量给图片加水印用PIL加glob,循环处理全文件夹。img.convert('RGBA')处理透明通道,文字水印用ImageDraw.text()画上去。不用Photoshop动作批处理,Python更快。
读Word文档里的表格,python-docx库处理。doc.tables[0]拿到第一个表格,遍历行取内容。row.cells[0].text拿每个单元格内容,直接存成DataFrame。
处理复杂字符串时用str.format()或f-string。f'姓名: {name}, 年龄: {age}'简洁明了。别用加号拼接字符串,又慢又容易漏空格。
重命名DataFrame列名,用df.rename(columns={'旧名': '新名'}, inplace=True)。别去手动改Excel表头了,别人改错你都不知道。
操作JSON嵌套数据,用jsonpath库提取字段。jsonpath.jsonpath(data, '$..价格')匹配所有价格字段,比写十几行循环简单。
写脚本要传命令行参数,直接sys.argv取列表元素。sys.argv[1]取第一个参数,不用装额外库。小脚本就用这个,省得学argparse。
批量裁剪图片尺寸,img.crop((左, 上, 右, 下))按坐标裁剪。img.resize((宽, 高))缩放整个图片。具体坐标想不清,用画图软件打开看看像素位置。
用subprocess.run()调系统命令。调用ffmpeg转视频格式,subprocess.run(['ffmpeg', '-i', '输入.mp4', '输出.avi'])一行执行。不用切换窗口去敲命令行。
读取配置文件用configparser库。config['数据库']['host']直接取值,不用硬编码在代码里。改配置不用动代码,上线部署省心。
Excel里有个vlookup功能,Python里用pd.merge()替代。df1.merge(df2, on='工号', how='left')保留左侧所有数据,匹配右侧信息。比嵌套if函数清晰得多。
处理超大CSV文件,内存不够用就用chunksize参数。pd.read_csv(file, chunksize=10000)分批读取,处理完一批释放内存。省得机器卡死,重启又要重跑。
生成随机数据用numpy.random.randint()。造一百个0到100的随机数np.random.randint(0, 100, 100)。做模拟数据测试时免去手动输入。
修改文本文件里的特定行,用fileinput库。fileinput.input('文件.txt', inplace=True)支持原地修改,配合正则替换。省得打开文件读一遍,改完再写回去,代码少一半。
批量检查文件是否存在,用os.path.exists()循环判断。exists_list = [os.path.exists(f) for f in 文件列表],输出布尔列表一眼看清缺失的文件。比手动点开文件夹逐个看快。
要运行多个Python脚本,写个bash循环就行。for i in .py; do python $i; done,或者用subprocess调其他脚本。省事,跑完一个接着跑下一个。
处理日期加减用datetime.timedelta(days=7)。算下周一日期datetime.date.today() + datetime.timedelta(days=7)。别用calendar库算月份天数,容易算错。
Excel中条件格式怎么实现,用pandas的Styler.apply()方法。根据数值大小给单元格加背景色,导出到Excel里自动生效。省得手动调几百个单元格的颜色。
用openpyxl库直接改Excel格式。ws['A1'].font = Font(bold=True, color='FF0000')设置加粗和红色。改完保存就生效,不用一直用鼠标点。
批量修改文件名大小写,os.rename(f, f.upper())变全大写的。f.lower()变全小写的。公司新来了个命名规范,全部改成小写,一条循环全搞定。
处理Python中字典嵌套很麻烦,用collections.defaultdict(dict)。定义默认值为字典,直接赋值不会报KeyError,省去先判断key再初始化的步骤。
要把Python程序打包成exe,用pyinstaller --onefile 脚本.py。发给没装Python的同事,双击就运行。省得他们装环境,省的他们来烦你。
爬虫请求要带请求头,在requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})里加浏览器信息。不然网站把你当机器人封IP,还得花钱买代理。
解析HTML表格时,pandas.read_html会把表格转成DataFrame列表。直接用索引取你要的表,dfs[0]就行。不用等页面加载完再抓元素。
同时操作多个Excel文件,用with上下文管理器。with pd.ExcelWriter('汇总.xlsx') as writer循环写入多个sheet,写完了自动保存关闭。不会出错,也不会漏写。
写代码要打印进度条,用tqdm库。for i in tqdm(range(100)):直接出进度条。处理上千个文件时能看到跑到哪了,屏幕不卡在那不动。
合并多个CSV文件时,路径用glob.glob()匹配,循环读取再concat。写个三行代码搞定。同事还用bat脚本,早就过时了。
检查列表里的元素是否都满足条件,用all()函数。all(x > 0 for x in 列表)返回布尔值。any()检查是否有任意一个满足。比一一判断省事。
要用Python操作剪贴板,pyperclip.copy('内容')复制到剪贴板。pyperclip.paste()读取剪贴板。配合脚本自动完成复制粘贴的活。
处理JSON字符串里含有特殊字符,json.dumps()时加参数ensure_ascii=False。中文正常显示,不会变成\u开头的一堆乱码。调试的时候看得清楚。
要把数据存成批量SQL插入语句,用executemany()方法。一次执行多条insert,不用循环单条执行。省一半时间。
拿到一堆字典列表,要取某个key值组成新列表,用列表推导式。[item['name'] for item in 列表],一行代码。新手写三行循环,效率差一倍。
用datetime库计算两个日期差几天。(date1 - date2).days直接得出整数天数。别用Excel