Для каждой строки "для l oop" нельзя реализовать в моем скрипте - PullRequest
2 голосов
/ 05 марта 2020

Я совершенно новичок в Python, и в настоящее время я борюсь с "легким" шагом для большинства из вас.

Моя цель - копировать и вставлять строки из одного исходного файла в цель файл. НО. Целевые файлы должны сохранять свои первые 12 строк. после 12 строк он должен взять ВСЕ строки из исходного файла. Прекрасно работает до сих пор. Мне нужно только установить строки для последней части.

Таким образом, я должен вставить al oop вот так "для каждой найденной строки замените ее в целевом файле)

config_fstab = '# /etc/fstab: static file system information.'
einhaengepunkte_replace = '#Eigene_Einhaengepunkte'

with open(r'C:\Users\sample\Desktop\SCRIPTING02.txt') as input_header_stays:
    with open(r'C:\Users\sample\Desktop\ZWISCHENSPEICHER.txt','w') as zwischenspeicher:
        zeilen = input_header_stays.readlines()
        for i, line in enumerate(zeilen):
            if line.startswith(config_fstab):
                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])
input_header_stays.close()
zwischenspeicher.close()

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])

input_scripting_fstab.close()
zwischenspeicher.close()

Это мой код.

Я думаю, что сложная часть, где мне нужна помощь, такова:

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 сценарий нуждается в мозге.

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

Перечисление не требуется, если вы хотите копировать только после определенной точки в конец файла.


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')

0 голосов
/ 05 марта 2020

Вам просто нужно al oop, чтобы написать желаемое количество строк.

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]) # <---  
...