首页 > 解决方案 > 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

解决方案


不幸的是,这必须通过脚本来完成,因为正则表达式字符串替换本身不能改变字母大小写。这是一个执行此操作的 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


推荐阅读