我也想赚钱,转行了很多行业,最终选择了python

前言

今天给大家带来的是一个转行的故事,一个30岁才开始学习编程的小白,资质平平,真正的零基础。

他的故事和那些大众喜欢的、夸张的、甚至虚假的华丽转身不同,一点也不精彩、一点也不鸡汤,平淡如水,但是能反映出大多数人的真实情况。

故事开始。

地点:上海

时间:2017-2019
在这里插入图片描述

我曾经失落、失望、失掉所有方向

码农这个词,是我决定要学习编程的时候,我才知道是指程序员这么一个存在的。因为我本科的专业是液压应用,在毕业后的至少四年时间里,我一直都在从事于对口的工作,我对编程一类的人或事的了解程度,大概不会超过美国人对汉语的了解程度。

当初到底是出于什么原因要去学编程的,我真的想不起来了,但至少可以确定一点,绝对不是因为兴趣、热情。可能因为听说工资普遍很高,普普通通月薪可以过万,至少网上都是这么流传的(万恶的网络)。相比于我们液压这行来说,月薪能过万,那是绝对的诱惑力啊。

液压这个词,应该对大多数人都是陌生的吧。既古老又小众的行业,当然最主要的问题就是工资普遍很低。每天在各种油污里抹来滚去,“混迹”在一群年纪比我父亲还大的操作工人里面。他们是一个既可怜又可恨的群体,对待从办公室下来的技术人员却是一副藐视的样子,不服从安排、做事偷工减料,这些就是他们的日常。

采用液压技术的设备最怕的就是密封不行,出现漏油了就是神仙都难救了,因为你根本不知道是哪里在漏,就好比是一片森林起火了,你根本看不出起火源头在哪里一样。所以我们的图纸上会着重标记出密封圈的大小和准确的安装位置,图纸会下发到工人手里,至于他们看过没有,或者就算看过、但是看懂没有,这些事情只有天知道了。因为他们心里明白,产品出现问题,背锅的多半是我们技术人员。

如果你顶真去追查到底的话,哼哼!他们就很不客气地炒了老板,此处不留爷,自有留爷处,分分钟换个工厂继续干,不拖欠“饷银”就行,好不潇洒的快意人生。想想真是可恨,我就不能像他们那样“潇潇洒洒”的呢?领导说,你不同,你还年轻(我是指那个时候,现在也老了),你还要学很多知识和经验,你还有光明的前途,车间那帮子人就这样了。

突然想起一句话(忘记在哪里看到的了,多半是那些泛滥的鸡汤文里吧):人生就像一只趴在玻璃窗上的苍蝇,前途一片光明,但又找不到出路。

彼时的我,大约如此。
在这里插入图片描述

第一次转行,是去做了销售

想想当初刚毕业时,真是可笑又天真,我抱定学以致用的决心,至少有四年的时间一直是在从事液压行业的工作。后来觉得这个古老的行业只会让人生越来越灰蒙蒙的,于是决定转行去做销售。因为我以为销售就是喜欢与人聊天就可以了的,加上我肚子里还有点所谓的技术积累,怎么着都可以满足客户需求的啊。

当然,看完上一句,你大概都能感觉到我这里要用转折了。

没错,我的销售业绩做的一塌糊涂。我转行做销售,是进了一家贸易公司,是一个瑞士品牌传感器的代理商。公司结构很简单,一共十来个人:老板,销售人员,销售助理,仓库管理,还有一个前台小姐姐。

公司内部群里有一个共同维护着的客户资源库,那里面大大小小的公司有八百多个吧,但真正有稳定可观销售额的客户是个位数,而且大都是在老板自己手里捏着。留给销售人员的,就是一些“路人甲路人乙”之类的客户了。

有的销售人员入行早,他们根本就不屑看公司的这个资源库,因为他们已经积累了大量的客户在手上,用一句时髦的话,那叫“自带流量,那个点击率和成交量可是噌噌的、刚刚的”。所以,也就像我这种半路出家的,要啥没啥的,对公司的那个资源库就像抱着圣经一样,天天挨个打电话联系,过去拜访客户。

我们拜访的人员基本上就是对方公司的技术开发人员和采购人员。因为开发人员要决定买什么,采购人员要决定找谁买,当然我这里只是粗略地描述一下概况,有的公司可能是采购部权力很大,基本上可以一手包办。

在那大半年的时间里,我没有什么直观的业绩,要说唯一的收获就是认识了很多软件开发人员,也就是程序员,也就是码农。

我对这个群体的认识是这样的:他们的年龄普遍偏年轻,但面貌却使得他们看起来又没那么年轻,尤其是其中有些人的头发数量不是太乐观,个性简单纯粹,跟他们聊天是一件轻松惬意的事,为人有礼貌有素质。可能这些经历给我带来了一些潜移默化的影响,后来我又转行去做程序员,应该也与此有关。

坦白讲,跑销售的那些日子里,每天都是在焦虑中度过,最尴尬的时候是跑到没有客户可以跑了,整天在公司坐着,日报、周报几乎没有东西可以写,销售计划也无从下手。真的是如坐针毡啊!觉得这样子搞下去,真的是浪费时间,把整个人都荒废了,唉!这么个窘境怎么破?

在最一筹莫展的时候,机缘巧合之下,我认识了DS,他是某老牌外企的资深程序员,他对软件开发的侃侃而谈让我高山仰止。当时我就心里琢磨,既然销售干不下去了,要不就转行学习编程吧,至少还能混口饭吃。反正老本行的液压应用,我是断然不会重操旧业的。

随即我就鼓起勇气,把我当前的窘境与他说了,跟他说了想跟他学习编程,想请他给我指点迷津。他觉得我是个纯粹的门外汉,十足的小白,零基础没法子教,只留下了一句“你自己买几本书先看看再说吧”。

在这里插入图片描述

我参加了要2万学费的培训班

后来的几天里,我天天在网上看那些免费的视频教程。就好比是掉到水里的人看见稻草也会去抓一样,人越是在无计可施的时候,就越是去相信那些写着速成的标题,比如“三天学会什么什么”,“一篇文章讲明白什么什么”,“小白和大牛的差距,就只差这本什么什么”。

慢慢地,看得多了,就知道这些鬼玩意都是骗点击率,或者是软文广告,卖课程的。自学的过程简直是煎熬,晦涩难懂,心里很痛恨那些人就不能说点人话吗?其实自己心里明白,就是智商捉急、资质不够,学不懂嘛。

万般无奈之下,我又联系了DS,跟他说了最近的情况,他建议我去报个培训班吧。既然你不知道该学什么,也不知道该怎么学,那就只能花钱买服务了。

我参加了一个为期三个月的软件培训班,学费2万,培训机构可以提供贷款,但我是交的全款,居然也没给一点优惠。

培训班是置办在一个老旧的写字楼里,租了一整层楼改造成了教室,教室一共有6个,一个班的学员数量一般在30人左右。在培训机构的入口墙壁上醒目挂着一块牌匾,标题是“XXX培训机构合作企业”,然后下面罗列了很多知名的公司,国内国外的都有,比如华为,中兴,三星,飞利浦,科大讯飞,LG等等,给人的感觉就是,只要我在这里闭关“深造”3个月后,就能进入这些公司了。现在想起来,真是呵呵。

在牌匾的旁边,是一张大红纸,上面用粗体的记号笔写着一些姓名、公司名、薪水。那是已经毕业的老学员的应聘offer记录,薪水大都在6000-7000左右,这家机构还算良心实诚,没有夸大写个2万3万的。

去的第一天,我发现来这里学习的,有八成都是那些野鸡院校的大四学生。因为没法指望学校来找到好工作,只有自己出来参加培训班,学点干货,然后出去找工作。我在的那个班里,有好些人本来都不是住在上海,他们自己说是从江西景德镇过来的,而且是慕名而来,我差点没笑出来,敢情是学费给了你们优惠了吧。

因为还是在读的学生,手上没钱,他们都选择了贷款交学费,而且就住在培训机构提供的群租房里,后来听说被社区管理人员上门砸墙砸床,统统赶走了。

噢,顺便提一句,那时候我已经是奔三的男人。像我这个年纪还来转行学编程的,真的很少,只占个位数。

课程安排很紧凑,每一门课会有印发的教材,当然,都是培训机构自己编写的。对于初学者而言,那些教材编写的非常不友好,基本不会看,看也看不懂。

每个班除了代课老师,还会配有一个班主任,两个班主任助理(是年轻小姐姐)。班主任监督学员的学习状态,每当一门课程结束后,助理小姐姐就会跑来做问卷调查,就是让学员给代课老师评分提意见。

在这里插入图片描述

半生不熟的码农日子开始了

接下来就是安排企业过来招聘了,培训机构既然收了你的钱,那戏就要做的足一点。之前提到的牌匾上那些知名公司,你可以放心,是都不会来的。

过来招聘的公司不仅仅只是上海本地的,也有上海周边其他城市的公司过来招聘。而且也不会刚好你一学完课程,就会立即能有企业过来,没有那么刚刚好。据说有的班等了一两个月也是常有的事,就好像谈恋爱一样,还要讲缘分的。

很不幸的,我的班就是那批没有缘分的。那怎么办啊?我花了这么多钱,我对培训机构的期望是很高的,可是却没能马上安排工作,当时心里的着急啊。学员们一个个都哭丧着脸,就都去自谋出路了。

这个时候,我就想起了当初跑客户时,认识的那许多可爱的程序员们了。联系了一圈,最后DS给了我好消息,他给了我面试的机会,也提前给了我一些“考点”。后来依旧不出意外地被面试官问到怀疑人生,当时就觉得没戏了。我还记得我在回去的路上,眼睛一直盯着窗外的浮云,三十岁的男人混成这样,心里只觉得天地都好像翻覆了一样。

在这里插入图片描述

也哭、也笑、也平凡着

可能对于自己是培训班出来的这件事,一直心存介怀,这两三年的码农日子里,我都保持着虚心战兢的心,我并不是什么高手,仍然是一边学习着、一边努力着。薪水没有网上流传的那么多,但比我曾经的液压行业强得多,足矣!如今的我已经年过三十,供着一套小两居室的房子,也有了一个可爱的宝宝,头发也都还在。每月除去房贷,剩下的结余也没有太多,生活不咸不淡的过着,其中夹带着简简单单的、微小而确实的幸福。

呵呵!看到这里,是不是有点失望,我并没有从平民到王子的华丽转身。从始至终我都是一个平凡的人,我资质平平,却又不甘于曾经的沉如死水的日子。因此,我选择了改变,去尝试、去学习,这一路没有芳草萋萋、落英缤纷的怡人风景,或偶然或刻意,最后的境地却也是豁然开朗了,总归是比以前好了。

写到这里,我等待已久的地铁也刚好到站了,正待进入,车厢里面传来一阵歌声:“我曾经像你像他像那野草野花,绝望着也渴望着,也哭也笑也平凡着”。

如果此时你也想学编程,那么你很幸运,因为你即将在这里得到一个系统学习python的资源,所以好好珍惜时间静下心来学习,赚钱都是顺带的结果

零基础Python学习资料

附上Python学习指南

在这里插入图片描述

👉Python学习路线汇总👈

围绕Python所有方向的技术点做的整理,以形成各个领域的知识点汇总,这样就可以按照上面的知识点去找对应的学习资源,保证学得较为全面。

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

边学边练是最高效的学习方法,这时候可以搞点实战案例来学习。

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈


👉资料领取👈

这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加“住隔壁的王叔”,输入"领取资料" 可免费领取全套资料【有什么需要协作的还可以随时联系我】朋友圈也会不定时的更新最前言python知识。
在这里插入图片描述

你提到 **“利用 Python 将 Meld 比较的文件差异进行处理”**,这是一个非常实用的需求。`Meld` 是一个图形化的 diff 工具(常用于比较文件、目录和版本控制),但它本身是 GUI 工具,不便于自动化。 不过我们可以反过来思考:**用 Python 实现类似 Meld 的功能(结构化提取差异)并进一步处理这些差异**,甚至可以调用 Meld 或生成它能识别的格式。 --- ## ✅ 目标 你做的可能是: - 自动化分析两个文件/目录之间的差异; - 提取 Meld 显示的那种“可操作”的差异(增删改行、块级变化); - 在 Python 中对这些差异做后续处理(如过滤、统计、应用补丁、生成报告等)。 下面我将提供完整的解决方案: --- ### ✅ 方案 1:使用 `difflib` 模拟 Meld 的文本差异输出(推荐) ```python import difflib def get_diff_as_meld_like(file1, file2): with open(file1, 'r', encoding='utf-8') as f1: lines1 = f1.readlines() with open(file2, 'r', encoding='utf-8') as f2: lines2 = f2.readlines() # 使用 unified_diff,这是大多数工具(包括 Meld)使用的标准格式 diff = list(difflib.unified_diff( lines1, lines2, fromfile=file1, tofile=file2, lineterm='' )) return diff # 获取差异 diff_lines = get_diff_as_meld_like('file1.txt', 'file2.txt') # 打印出来就像 Meld 显示的一样 print('\n'.join(diff_lines)) ``` #### 🔍 输出示例(标准 Unified Diff 格式): ```diff --- file1.txt +++ file2.txt @@ -1,4 +1,4 @@ apple -banana -cherry +orange +grape date ``` > 这正是 Meld 内部解析的内容格式! --- ### ✅ 方案 2:解析 Unified Diff 结果,提取结构化差异(用于程序处理) 现在我们来“处理”这些差异 —— 把原始 diff 文本转为 Python 可操作的数据结构。 ```python from collections import namedtuple import re # 定义差异块类型 DiffBlock = namedtuple('DiffBlock', 'start1, end1, start2, end2, lines') # lines: 列表,每项为 (type, content),type 属于 (' ', '-', '+') def parse_unified_diff(diff_lines): blocks = [] i = 0 while i < len(diff_lines): line = diff_lines[i] if line.startswith('@@'): # 解析 @@ -X,Y +A,B @@ 行 m = re.match(r'@@\s*-(\d+),?(\d*)\s*\+(\d+),?(\d*)\s*@@', line) if not m: i += 1 continue start1 = int(m.group(1)) count1 = int(m.group(2)) if m.group(2) else 1 start2 = int(m.group(3)) count2 = int(m.group(4)) if m.group(4) else 1 end1 = start1 + count1 - 1 end2 = start2 + count2 - 1 lines = [] i += 1 while i < len(diff_lines) and not diff_lines[i].startswith('@@') and not diff_lines[i].startswith('---') and not diff_lines[i].startswith('+++'): tag = diff_lines[i][0] content = diff_lines[i][1:] lines.append((tag, content)) i += 1 block = DiffBlock(start1, end1, start2, end2, lines) blocks.append(block) continue i += 1 return blocks ``` #### 🔧 使用方法: ```python diff_lines = get_diff_as_meld_like('file1.txt', 'file2.txt') blocks = parse_unified_diff(diff_lines) for idx, block in enumerate(blocks): print(f"🔄 差异块 #{idx+1}: 文件1 [{block.start1} → {block.end1}], 文件2 [{block.start2} → {block.end2}]") for tag, content in block.lines: prefix = {' ': ' ', '-': '-', '+': '+'}[tag] print(f"{prefix} {content}") ``` #### 🧩 示例输出: ``` 🔄 差异块 #1: 文件1 [2 → 3], 文件2 [2 → 3] - banana - cherry + orange + grape ``` --- ### ✅ 方案 3:对差异进行“处理”——常见操作示例 你现在可以用 Python 对这些差异做任何事了。 #### ✅ 示例 1:统计新增/删除行数 ```python added = 0 removed = 0 for block in blocks: for tag, _ in block.lines: if tag == '+': added += 1 elif tag == '-': removed += 1 print(f"📈 新增 {added} 行,删除 {removed} 行") ``` #### ✅ 示例 2:只保留新增内容(模拟“patch 增量”) ```python new_content_only = [] for block in blocks: for tag, content in block.lines: if tag == '+': new_content_only.append(content.rstrip()) print("🆕 新增的内容:") print('\n'.join(new_content_only)) ``` #### ✅ 示例 3:生成反向补丁(reverse patch) ```python inverse_diff = [] for block in blocks: inverse_block = [] for tag, content in block.lines: if tag == '+': inverse_block.append('-' + content) elif tag == '-': inverse_block.append('+' + content) else: inverse_block.append(' ' + content) header = f"@@ -{block.start2},{block.end2-block.start2+1} +{block.start1},{block.end1-block.start1+1} @@" inverse_diff.append(header) inverse_diff.extend(inverse_block) # 保存为 reverse.patch with open('reverse.patch', 'w') as f: f.write('\n'.join(inverse_diff)) ``` --- ### ✅ 方案 4:调用外部 Meld 并捕获其行为(高级) 如果你仍然希望使用 Meld 的 GUI 来查看结果,但由 Python 控制流程: ```python import subprocess def launch_meld_compare(file1, file2): try: subprocess.run(['meld', file1, file2], check=True) except FileNotFoundError: print("❌ 错误:未安装 Meld,请运行 `sudo apt install meld`(Linux)或从官网下载") except subprocess.CalledProcessError as e: print(f"❌ Meld 启动失败:{e}") # 调用 Meld 打开对比界面 launch_meld_compare('file1.txt', 'file2.txt') ``` > 💡 提示:Meld 支持目录比较、Git 集成、三向合并等强大功能。 --- ### ✅ 方案 5:导出差异为 HTML 报告(类似 Meld 的网页版) ```python def generate_html_diff_report(file1, file2, output='diff.html'): with open(file1, 'r', encoding='utf-8') as f1: lines1 = f1.readlines() with open(file2, 'r', encoding='utf-8') as f2: lines2 = f2.readlines() d = difflib.HtmlDiff() html = d.make_file( lines1, lines2, fromdesc=f'原文件: {file1}', todesc=f'新文件: {file2}', context=True, numlines=3 ) with open(output, 'w', encoding='utf-8') as f: f.write(html) print(f"✅ HTML 差异报告已生成:{output}") generate_html_diff_report('file1.txt', 'file2.txt') ``` 打开 `diff.html` 就能看到彩色高亮、行号、上下文,非常接近 Meld 的视觉体验。 --- ### ✅ 总结:如何替代/增强 Meld 功能? | 需求 | 推荐方案 | |------|----------| | 查看差异(GUI) | 调用 `subprocess.run(['meld', ...])` | | 自动化提取差异 | `difflib.unified_diff` + `parse_unified_diff` | | 分析差异内容 | 结构化数据处理(added/removed 统计) | | 导出可视化报告 | `HtmlDiff` 生成网页 | | 应用或反转差异 | 构造 patch 文件或反向 diff | | 多文件/目录比较 | 扩展为遍历文件夹 + 批量处理 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值