多行字符串,例如
abc 123
456 def
想要的结果(序号 + 2):
cde 345
678 fgh
如果我使用:
text = "abc 123\n456 def"
add2=''.join(chr(ord(c)+2) for c in text)
print text
print add2
空格和\r\n也会被替换,请问如何在第2行代码中添加不包含space、\r或\n的异常
附注这是这个 question 的跟进。
请您参考如下方法:
您的另一个问题表明您可能正在翻译一个很长的字符串(一个 PDF 文件)。在这种情况下,使用字符串 translate 方法比在字符串上逐个字符进行 for 循环更快:
测试.py:
import string
infile='filename.pdf'
outfile='newfile.pdf'
with open(infile,'r') as f:
text=f.read()
def using_translate():
start_chars=''.join(chr(n) for n in range(256) if not chr(n).isspace())
end_chars=''.join(chr((ord(c)+2)%256) for c in start_chars)
table = string.maketrans(start_chars,end_chars)
return text.translate(table)
def using_for_c_in_text():
return ''.join(chr((ord(c) + 2)%256) if not c.isspace() else c for c in text)
这显示了使用 1M pdf 文件运行 timeit 的结果:
# % python -mtimeit -s"import test" "test.using_for_c_in_text()"
# 10 loops, best of 3: 821 msec per loop
# % python -mtimeit -s"import test" "test.using_translate()"
# 100 loops, best of 3: 4.36 msec per loop
PS:许多答案(包括我的一个答案)都使用了 chr(ord(c) + 2)。如果 ord(c)+2>=256,这将引发 TypeError。为避免 TypeError,您可以使用 chr((ord(c) + 2)%256)。
