【问题标题】:How to modify, in list over which I iterate with enumerate, another line than that on which the iteration has arrived?如何在我用枚举迭代的列表中修改迭代到达的另一行?
【发布时间】:2013-09-19 07:47:09
【问题描述】:

在接下来的迭代中,一旦满足查找行的条件,我如何修改并写入包含列表的文本文件,该行位于距离迭代到达的位置为“n”行的位置?

    llll=['aaa','ww','emmm','wiguy','ynof','sijegy']
    mfw=open(r"D:\file.txt",'r')
    listmfw=mfw.readlines()
    for i, line in enumerate(listmfw):
            if line != '\n':
                if not (line.split()[0] in llll):
                    if (line.strip('\n') == 'wiguy'):
                    i=i-42
                    print('zugyt')

#As the line where I want to write is empty,I tried:
                    line=line.replace('\n\',''zugyt')

但是什么都没发生

我添加了缺少的内容 - 输入错误!

【问题讨论】:

  • “什么都没有发生”是什么意思?由于if not (line.split()[0] in ):,这段代码甚至不应该被解析。
  • 你能提供一个输入和输出的例子吗?

标签: python list replace line enumerate


【解决方案1】:

我找到了一个可行的解决方案,它将我需要的内容写在我需要的位置,相对于指定条件找到的另一个位置。这是::

    mfw=open(r"D:\file.txt",'r')
    listmfw=mfw.readlines()
    for i, line in enumerate(listmfw):
            if line != '\n':
                #if not (line.split()[0] in llll):
                    if (line.strip('\n') == 'wiguy'):
                        listmfw[i-43]='bzz'
                        out = open(r"D:\Users\cristina\Documents\horia\Linguistics\file.txt", 'w')
                        out.writelines(listmfw)
                        listmfw[i-31]='vrrr'
                        out.writelines(listmfw)
                        listmfw[i-19]='dopiu'
                        out.writelines(listmfw)
                    if (line.strip('\n') == 'emmm'):
                        listmfw[i-13]='ommm'
                        out.writelines(listmfw)
                    if (line.strip('\n') == 'sijegy'):
                        listmfw[i-19]='mrrr'
                        out.writelines(listmfw)
                        out.flush()
                        out.close()
    mfw.close()

【讨论】:

  • 恭喜,只有几个 cmets。我会谨慎地将输出文件管理放在 if 语句中,它依赖于遵循的特定路径,例如如果 emmm\n 出现在 wiguy\n 之前,这将导致错误,因为 out 不会被初始化。此外,您实际上并不需要 mfw.readlines 调用,因为这仅使用 for i, line in enumerate(mfw): 将整个文件读入内存即可正常工作,并且一次只处理内存中的一行。我还将查看您的第一行的 with 语句。
【解决方案2】:

我想你可能误解了python的文件接口是做什么的。即使您将打开方式更改为读/写然后写入文件,所做的只是覆盖您写入时文件中的内容。您可能想查看fileinput,下面将所有空白换行符替换为“Test\n”:

from __future__ import print_function
import fileinput

file = fileinput.input('test.txt', inplace=1)
for line in file:
    if line == '\n':
        print('Test')
    else:
        print(line, end='')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多