我对编程很新,我有一个简单的问题,我只是不知道语法。我有一个常规文本文件,我想用数字替换所有字母。即如果我找到“a”或“A”,我想用数字“1”代替。如果我找到“b”或“B”,我想替换数字“2”等。有人可以帮助我,我知道这是最基本的,但我正在努力学习自己编程,这是非常困难的。感谢您!
答案 0 :(得分:2)
E.g。
mappings = { "a" : "1", "b" : "2" }
f = open("myfile.txt")
for line in f:
for oldc, newc in mappings.items():
line = line.replace(oldc, newc)
print line
答案 1 :(得分:2)
使用翻译表,string.maketrans和s.translate:
import string
tr_from = string.lowercase
# replace 'a' with 1, ... 'i' with '9', 'j' with '0', 'k' with '1'
# change the '(i+1)%10' part if you want different behavior
tr_to = "".join(str((i+1)%10) for i in xrange(len(tr_from)))
assert len(tr_from) == len(tr_to)
# handling lowercase and uppercase
tr_table = string.maketrans(tr_from + tr_from.upper(), tr_to + tr_to)
with open('infilename', 'r') as infile:
with open('outfilename', 'w') as outfile:
# this reads the entire file into memory
output = infile.read().translate(tr_table)
outfile.write(output)
将行中的文件而不是全部读入内存:
for line in infile:
outfile.write(line.translate(tr)table))
答案 2 :(得分:0)
这是一个过于复杂的答案,但它有一些有用的Python概念,你应该在某个阶段学习。这是简单的版本:
with open(<path to file>) as f:
for line in f:
for char in line:
if char.isalpha():
print ord(char) - ord("a") + 1
第一行处理打开(和关闭)文件。第二个迭代文件的所有行。第三个遍历行中的每个字符。第四个检查字符是否是一个字母(“。”的数字是什么,比如说?)。第五个是神奇的:ord
将一个字母改成它的ASCII码,这是一个整数。由于代码不是从1开始,因此必须首先减去“a”的代码。
作为稍后的练习,这是一个更通用的版本,它一次一个地接受任何字符串和yield
字符串中的字符。如果您要我解释,请告诉我。
>>> def transformed(it):
... it = iter(it)
... for char in it:
... if char.isalpha():
... yield ord(char) - ord("a")
...
>>> list(transformed("hello, world"))
[7, 4, 11, 11, 14, 22, 14, 17, 11, 3]