Python中的Txt文件替换

时间:2011-07-23 22:33:28

标签: python parsing text-files

我对编程很新,我有一个简单的问题,我只是不知道语法。我有一个常规文本文件,我想用数字替换所有字母。即如果我找到“a”或“A”,我想用数字“1”代替。如果我找到“b”或“B”,我想替换数字“2”等。有人可以帮助我,我知道这是最基本的,但我正在努力学习自己编程,这是非常困难的。感谢您!

3 个答案:

答案 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.maketranss.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]