字符串格式化和连接

时间:2012-08-22 16:47:02

标签: python string

我正在阅读文本文件,它给出了类似的输出:

o hi! My name is Saurabh.

o I like python.

我必须将上面的输出转换为:

*1 hi! My name is Saurabh

*2 I like python.

简单的字符串替换(将“\ no”替换为“”),然后在python中添加数字给了我:

*1

o hi! My name is Saurabh

*2

o I like python.

任何人都可以帮助我获得正确的输出

*1 hi! My name is Saurabh

*2 I like python.

3 个答案:

答案 0 :(得分:1)

with open('sample.txt', 'r') as fin:
    lines = fin.readlines()

    with open('sample_output.txt', 'w') as fout:
        index = 1
        for line in lines:
            if line[0] == 'o':
                line = '*' + str(index) + line[1:]
                index += 1
            fout.write(line.rstrip() + '\n')

答案 1 :(得分:1)

如果您逐行阅读,则替换'\ no'不是解决方案,因为'\ n'不在您的行的开头。 在这种情况下,您将需要使用正则表达式:

import re
f = open('test.txt')
h = open('op.txt','w')
gen = (line.strip() for line in f)

for line in enumerate(gen,1):
    h.write(re.sub('^o','*'+str(line[0]),line[1]) + '\n')
f.close()
h.close()

PS:您可能想检查该行是否包含任何内容,然后,不要做任何事情;否则写入新文件

答案 2 :(得分:0)

这是我的解决方案:

import re

f_in=open('data_in.txt', 'r')
f_out=open('data_out.txt', 'w')
ln=1
for line in f_in:
    s = re.sub('^o+','*%-3i' % ln,line)
    f_out.write(s)
    if not line=='\n': ln += 1
f_in.close()
f_out.close()