当我尝试在linux中使用f.openpython更改它们时,内容会重复

2024-06-02 12:52:54 发布

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

我的代码是这种格式的

#!/usr/bin/python

fout = open("names2", "w")
fin = open("names", "r")

for line in fin:
   fout.write(line.replace('Smith','Mr.Smith'))
   fout.write(line.replace('Walker','Mr.Walker'))

fout.close()

我的示例文件是

Smith           Anderson        Clark           Wright          Mitchell
Johnson         Thomas          Rodriguez       Lopez           Perez
Williams        Jackson         Lewis           Hill            Roberts
Jones           White           Lee             Scott           Turner
Brown           Harris          Walker          Green           Phillips
Davis           Martin          Hall            Adams           Campbell
Miller          Thompson        Allen           Baker           Parker
Wilson          Garcia          Young           Gonzalez        Evans
Moore           Martinez        Hernandez       Nelson          Edwards
Taylor          Robinson        King            Carter          Collins

而不是把史密斯换成史密斯先生和沃克擦肩而过沃克先生,我明白了

Mr.Smith                Anderson        Clark           Wright          Mitchell
Smith           Anderson        Clark           Wright          Mitchell
Johnson         Thomas          Rodriguez       Lopez           Perez
Johnson         Thomas          Rodriguez       Lopez           Perez
Williams        Jackson         Lewis           Hill            Roberts
Williams        Jackson         Lewis           Hill            Roberts
Jones           White           Lee             Scott           Turner
Jones           White           Lee             Scott           Turner
Brown           Harris          Walker          Green           Phillips
Brown           Harris          Mr.Walker               Green           Phillips
Davis           Martin          Hall            Adams           Campbell
Davis           Martin          Hall            Adams           Campbell
Miller          Thompson        Allen           Baker           Parker
Miller          Thompson        Allen           Baker           Parker
Wilson          Garcia          Young           Gonzalez        Evans
Wilson          Garcia          Young           Gonzalez        Evans
Moore           Martinez        Hernandez       Nelson          Edwards
Moore           Martinez        Hernandez       Nelson          Edwards
Taylor          Robinson        King            Carter          Collins
Taylor          Robinson        King            Carter          Collins

也就是说,对于每个for,文件都会创建一个额外的实例,并且行会被复制,这是我不希望发生的。我知道附近有工作吗?我有python2.4.3。谢谢!你知道吗


Tags: linethomasandersonsmithmrwalkerclarkwilliams
2条回答

快速修复方法是应用链式str.replace调用:

for line in fin:
   fout.write(line.replace('Smith', 'Mr.Smith').replace('Walker','Mr.Walker'))

但请注意,str.replace的一个问题是,这也会影响类似于Smithy的字符串,要处理这种情况,请使用带单词边界的regex,或者先将文件中的每一行转换为列表,然后更改该列表中的项。你知道吗

那是因为你写了两遍。你知道吗

将循环更改为:

for line in fin:
    line = line.replace('Smith','Mr.Smith')
    line = line.replace('Walker','Mr.Walker')
    fout.write(line)

相关问题 更多 >