练习题:编写一个程序,读取一个Python源程序文件source.py,将文件中所有除保留字外的小写字母换成大写字母。生成后的文件要能够被Python解释器正确执行。

这个问题要考虑到需要还原python代码原有的空格和缩进:

import keyword
import re

def rewrite_python_file(input_file, output_file):
    with open(input_file, 'r') as source, open(output_file, 'w') as target:
        pat = '[a-zA-Z]+'
        for line in source:
            new_line = ''
            start = 0
            lst = re.findall(pat,line)
            for word in lst:
                # 找到单词在原始行中的位置
                start = line.find(word, start)
                end = start + len(word)
                # 如果单词不是保留字,则将其转换为大写
                if not keyword.iskeyword(word) and word.islower():
                    word = word.upper()
                # 将单词及其前面的空格添加到新的行中
                new_line += line[len(new_line):start] + word
                start = end
            # 将剩余的部分添加到新的行中
            new_line += line[len(new_line):]
            target.write(new_line)

# 使用方法
rewrite_python_file('source.py', 'target.py')

在keyword模块中的kwlist保留字:

kwlist = [
    'False',
    'None',
    'True',
    'and',
    'as',
    'assert',
    'async',
    'await',
    'break',
    'class',
    'continue',
    'def',
    'del',
    'elif',
    'else',
    'except',
    'finally',
    'for',
    'from',
    'global',
    'if',
    'import',
    'in',
    'is',
    'lambda',
    'nonlocal',
    'not',
    'or',
    'pass',
    'raise',
    'return',
    'try',
    'while',
    'with',
    'yield'
]

但是还是会出现执行不了的情况,比如导入模块的名字、以及print这些非保留字等,大写之后解释器是无法识别的。。。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值