行程编码

2024-09-29 21:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想打开一个包含以下内容的现有文件:

Hel2o. Th3ese a2re some cha3ra3ct2ers.
Her3e ar2e so5me m2or3e2 ch3aracters.  

并将其写入另一个文件:

Hello. Thhhese aare some chaaaraaactters.
Herrre arre sooooome mmorrree chhharacters.

我想一个字符一个字符地读取字符串,当达到整数n时,打印前一个字符n的次数会增加,但我不确定如何为此编写代码。现在我的情况是:

def decode(user_file):
    file1 = open(user_file, 'r')
    file2 = open('test.txt', 'w')
    char = file1.read(1)
    while char:
        file2.write(char)
        char = file1.read(1)

这将从所选文件读取代码并将其打印到输出文件,但是如何在字符后检测整数,然后在继续之前打印该字符n次?我使用的是python3.7

提前感谢:)


Tags: 文件代码read整数someopen字符file1
3条回答

假设您的文件内容存储在变量s中,您可以将str.join与以下生成器表达式一起使用,该表达式通过压缩字符串本身(但分开一个索引)来对字符进行配对,并测试配对中的第二个字符是否是数字,以便将第一个字符重复多次:

''.join(c * int(n) if n.isdigit() else '' if c.isdigit() else c for c, n in zip(s, s[1:] + '1'))

这将返回:

Hello. Thhhese aare some chaaaraaactters.
Herrre arre sooooome mmorrree chhharacters. 

检查字符串中的字符是否是数字或不使用regex

import re
string2=''
prev_char=''
for i in open(user_file, 'r').read():
    if not re.search('\d',i):
        prev_char=i
        string2+=i
    else:
        string2+=prev_char*int(i)

with open('test.txt', 'w') as file_out:
    file_out.write(string2)

使用正则表达式和sub的解决方案:

import re

pattern = re.compile('(\w)(\d+)')


def repl(m):
    return m.group(1) * int(m.group(2))


texts = ['Hel2o. Th3ese a2re some cha3ra3ct2ers.', 'Her3e ar2e so5me m2or3e2 ch3aracters.']


for text in texts:
    result = pattern.sub(repl, text)
    print(result)

输出

Hello. Thhhese aare some chaaaraaactters.
Herrre arre sooooome mmorrree chhharacters.

解释

模式(\w)(\d+)匹配一个字母后跟一组或多个数字。如果找到该模式,则使用函数repl替换它

相关问题 更多 >

    热门问题