python - Python 文件 - 从 CamelCase 更改为下划线命名约定 - 有什么方法可以更快地做到这一点?
问题描述
几周前,在我学习 Python 的第 4 周,我编写了我的第一个真实程序。现在大约一个月后,有了更多的经验,我正在尝试重构代码。我要做的第一件事是更改我的命名约定以遵循 PEP8 指南。
最初,我使用 Jupyter Notebook 以交互方式准备好程序。由于我具有 Java 编程背景,因此使用笔记本界面是一个非常积极和令人愉快的惊喜,因为我可以以交互方式检查值和代码。然后,一旦完成,我将整个代码复制并粘贴到一个 python 文件中,并使用 Mu 代码编辑器将其作为一个整体运行。
现在我试图通过简单地将所有项目从 camelCase 重命名为 underscore 约定来进行重构,Jupyter 和 Mu 代码编辑器都没有对重构的任何支持。因此,在进行了一些谷歌搜索之后,我安装了 PyCharm 并开始尝试它。重构重命名的能力非常好,但是,我发现它有许多我不完全理解的细微差别 - 是否有使用重命名的任何提示,以便我可以使用 camelCase 转换所有变量和函数下划线约定很快 - 例如,所有变量名称一次更改,而不是一一更改?
这是我要重构的代码 - https://github.com/ssamsudeen/learning-python/blob/master/quranSRS.py
注意:发布此消息后,我做了一些实验来了解查找和替换在 Jupyter 中的工作原理 - 查找和替换对话框有 3 个切换按钮,用于区分大小写、正则表达式以及仅在选定单元格内替换的功能。我发现它提供的输出很有意义——所以,这就是我现在正在做的事情,直到我找到更好的方法来做到这一点。任何关于如何更好地查找和替换的建议也将受到欢迎(理想情况下,我希望替换排除我的评论或某些单元格,但无法弄清楚如何去做)
解决方案
不幸的是,这必须通过脚本来完成,因为正则表达式字符串替换本身不能改变字母大小写。这是一个执行此操作的 Python 脚本:
import sys
import re
with open(sys.argv[1]) as prgm:
text = prgm.read()
def subfunc(m):
result = ''
result += m.group(1)
# first word
result += '_'
result += m.group(2).lower()
# second word, if present
if m.group(3):
result += '_'
result += m.group(3).lower()
result += m.group(4)
return result
text = re.sub(r"(\W?[a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)?(\W|$)", subfunc, text)
with open(sys.argv[1], 'w') as prgm:
prgm.write(text)
另存为change_caps.py
,运行python change_caps.py quranSRS.py
推荐阅读
- pip - 让 pipenv 在应用程序工作的 Virtualenv 中工作
- docker - Docker compose 不会为链接服务设置公开端口 80
- java - 使用 listview 并为下一节课添加数据
- ruby - 只包含偶数的循环
- ios - 'UIViewController' 不是 'View Controller' Swift 的子类型
- operating-system - RTOS eCos 使用什么内核类型?
- java - Excel 日期格式转为 JAVA 中的数字
- python - 在Model的outer class方法中访问peewee的Meta子类
- prolog - Prolog 子句的溯因
- node.js - ZeroMQ 模式代理(路由器/路由器)不连接 Front 与 Back 或 Back 与 Front