Python 3.x 对于每一行“;for loop";无法在我的脚本中实现

Python 3.x 对于每一行“;for loop";无法在我的脚本中实现,python-3.x,loops,for-loop,replace,line,Python 3.x,Loops,For Loop,Replace,Line,我是Python的新手,目前我正努力为你们中的大多数人提供一个“简单”的步骤 我的目标是将行从一个源文件复制并粘贴到目标文件。 但是目标文件应保留其前12行。在12行之后,它应该从源文件中获取所有行。到目前为止效果很好。我只需要为最后一部分定好线 所以我必须放入一个循环,就像“对于目标文件中找到的每一行,替换它) 这是我的密码 我认为我需要帮助的棘手部分是: with open(r'C:\Users\sample\Desktop\SCRIPTING.txt') as input_scriptin

我是Python的新手,目前我正努力为你们中的大多数人提供一个“简单”的步骤

我的目标是将行从一个源文件复制并粘贴到目标文件。 但是目标文件应保留其前12行。在12行之后,它应该从源文件中获取所有行。到目前为止效果很好。我只需要为最后一部分定好线

所以我必须放入一个循环,就像“对于目标文件中找到的每一行,替换它)

这是我的密码

我认为我需要帮助的棘手部分是:

with open(r'C:\Users\sample\Desktop\SCRIPTING.txt') as input_scripting_fstab:
    with open(r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt','a') as zwischenspeicher:
        zeilen = input_scripting_fstab.readlines()
        for i, line in enumerate(zeilen):
            if line.startswith(einhaengepunkte_replace):
                zwischenspeicher.write(line)
                zwischenspeicher.write(zeilen[i + 1])
                zwischenspeicher.write(zeilen[i + 2])
                zwischenspeicher.write(zeilen[i + 3])
                zwischenspeicher.write(zeilen[i + 4])
                zwischenspeicher.write(zeilen[i + 5])
                zwischenspeicher.write(zeilen[i + 6])
                zwischenspeicher.write(zeilen[i + 7])
                zwischenspeicher.write(zeilen[i + 8])
                zwischenspeicher.write(zeilen[i + 9])
                zwischenspeicher.write(zeilen[i + 10])
                zwischenspeicher.write(zeilen[i + 11])
                zwischenspeicher.write(zeilen[i + 12])
                zwischenspeicher.write(zeilen[i + 13])
                zwischenspeicher.write(zeilen[i + 14])
                zwischenspeicher.write(zeilen[i + 15])
                zwischenspeicher.write(zeilen[i + 16])

行越来越多,我不能自己放行。这就是我的Python脚本需要大脑的地方。

您只需要一个循环来编写所需的行数

lines_to_copy = 16

with open(r'C:\Users\sample\Desktop\SCRIPTING.txt', 'r') as input_scripting_fstab:
    zeilen = input_scripting_fstab.readlines()

with open(r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt', 'a') as zwischenspeicher:
    for i, line in enumerate(zeilen):
        if line.startswith(einhaengepunkte_replace):
            for n in range(lines_to_copy): # Copy the next 16 lines.
                zwischenspeicher.write(zeilen[i + n]) # <---  
line\u to\u copy=16
打开(r'C:\Users\sample\Desktop\SCRIPTING.txt,'r')作为输入\u SCRIPTING\u fstab:
zeilen=input\u scripting\u fstab.readlines()
打开(r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt,“a”)作为ZWISCHENSPEICHER:
对于i,枚举中的行(zeilen):
如果线路启动(einhaengepunkte_替换):
对于范围内的n(行到复制):#复制接下来的16行。

write(zeilen[i+n])#如果只想在文件的某一点之后复制,则不需要枚举


einhaengepunkte_replace = '#Eigene_Einhaengepunkte'

with open(r'C:\Users\sample\Desktop\SCRIPTING.txt', 'r') as input_scripting_fstab:
    zeilen = input_scripting_fstab.readlines()

with open(r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt', 'a') as zwischenspeicher:
    writing = False
    for line in zeilen:
        # This flag just tells us when to start writing
        if line.startswith(einhaengepunkte_replace):
            writing = True

        if writing:
            zwischenspeicher.write(line)
因为你有一个模式,你甚至可以把它扔进一个函数

def copy_it(source='', destination='', start_point='', mode='a'):
    with open(source, 'r') as source_file:
        source_lines = source_file.readlines()

    with open(destination, mode) as dest_file:
        writing = False
        for line in source_lines:
            if line.startswith(start_point):
                writing = True

            if writing:
                dest_file.write(line)


copy_it(source=r'C:\Users\sample\Desktop\SCRIPTING.txt',
        destination=r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt',
        start_point='#Eigene_Einhaengepunkte')

copy_it(source=r'C:\Users\sample\Desktop\SCRIPTING02.txt',
        destination=r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt',
        start_point='# /etc/fstab: static file system information.',
        mode='w')


您不需要执行
file.close()
,因为您已经将
与open(“…”)一起用作文件:
。这会在您取消登录时自动关闭文件。谢谢。我删除了它。谢谢。这会使我的脚本小得多。但是我的问题还没有解决。我必须设置“数字16”“。如果我的源文件增长,我将不得不编辑我的脚本。有没有一种方法可以让“行到行”自动填充?要先读取行,然后编辑变量中的数字?是的,我们会找到一种方法使它自己填充。我们只需要知道,值16从何而来?文件结尾:)我们可以搜索“\n”,我想我们可以使用
len(zeilen)-12
而不是硬编码的
16
@Axe319的解决方案非常好,因为它完全摆脱了
enumerate
:)这是正确的。谢谢你的帮助。不错的社区。:)<代码>写入(行)
写入(zeilen)
;)这太棒了。非常感谢你。初学者很难理解一切。但我现在将逐行学习您的代码。非常感谢你!
def copy_it(source='', destination='', start_point='', mode='a'):
    with open(source, 'r') as source_file:
        source_lines = source_file.readlines()

    with open(destination, mode) as dest_file:
        writing = False
        for line in source_lines:
            if line.startswith(start_point):
                writing = True

            if writing:
                dest_file.write(line)


copy_it(source=r'C:\Users\sample\Desktop\SCRIPTING.txt',
        destination=r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt',
        start_point='#Eigene_Einhaengepunkte')

copy_it(source=r'C:\Users\sample\Desktop\SCRIPTING02.txt',
        destination=r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt',
        start_point='# /etc/fstab: static file system information.',
        mode='w')