2014-11-30 2 views
0

Так что у меня возникли проблемы с поиском решения моей проблемы. Я новичок в Python и не могу найти способ сделать эту работу. То, что я пытаюсь сделать, это перебрать все строки в файле и сопоставить несколько разных правил с каждой строкой и заменить всю строку содержимым пользователя. Я пробовал несколько методов, но никто не делает то, что мне нужно.Python Поиск и замена строки

print ("File to perform check on:") 

fileToSearch = input("> ") 

for line in fileinput.input(fileToSearch, inplace=True): 

    if 'foo' in line : 

     if 'footimestwo' in line : 

      sys.__stdout__.write('Wrong Answer. Try again:\n') 

      textToReplace = input("") 

      print(line.replace(line, textToReplace), end='') 

Это заменяет линию пользовательским вводом, но не оставляет неизмененных линий; он просто заменяет файл новыми строками.

Другой метод, который я попытался было это:

print ("File to perform check on:") 

fileToSearch = input("> ") 

fin = open(fileToSearch, 'r') 

fout = open("newFile.txt", 'w') 

for line in fin: 

    if 'foo' in line : 

     if 'rom' in line : 

      print ('Wrong Answer. Try again:') 

      textToReplace = input("> ") 

      fout.write(textToReplace+'\n') 

     else: 

      fout.write(line) 
    else: 

     fout.write(line) 

for line in fin: 

    if 'ram' in line : 

     if 'foo' in line : 

      print ('Wrong Answer. Try again:') 

      textToReplace = input("> ") 

      fout.write(textToReplace+'\n') 

     else: 

      fout.write(line) 

    else: 

     fout.write(line) 

fin.close() 

fout.close() 

Это делает изменения в новом файле и сохраняет состояние покоя линий для первого оператора, но не выполняет последующие заявления. Есть идеи?

+3

Подведите итог в 1 предложении, что вы пытаетесь сделать? – smushi

+0

Я пытаюсь выполнить поиск по каждой строке файла, сопоставить его с несколькими, разными критериями и, если он соответствует запросу, пользователь должен внести изменения в строку и заменить строку на ввод пользователя, сохраняя все остальные строки, которые не имеют изменилось. – JoeFin

+0

Я намерен использовать это для проверки безопасности ACL. – JoeFin

ответ

0

Что касается вашего первого фрагмента кода, вы не имеете else условие для if 'footimestwo' in line: или ваш if 'foo' in line :, и поэтому вы только выход линии вы просите вашего пользователя, чтобы исправить.

Что касается вашего второго фрагмента кода, для небольшого файла, вы бы лучше от всего хранения строк файла в памяти:

smallFile = open('path/to/a/small/file.txt') 
lines = smallFile.readlines() 
for i in range(0, len(lines)): 
    #do things, but replace lines by doing: 
    lines[i] = newStuffForLine 

Elsewise, вам нужно сбросить файл курсор:

bigFile = open('path/to/a/big/file.txt') 
outputIntermediate = open('path/to/a/tmp/file.txt', 'w') 
for line in bigFile: 
    #do first set of things, putting outputs in outputIntermediate 
outputIntermediate.close() 
bigFile.close() 
bigFile = open('oath/to/a/tmp/file.txt') 
for line in bigFile: 
    #do second set of things 

Во втором примере, используя промежуточный файл, вы предотвращаете проблему, описанную в комментариях к этому ответу, просто редактируя одни и те же наборы строк.

+0

Для второго фрагмента кода я попытался сделать оба изменения, но он продолжал дублировать те же строки в новом выходном файле с помощью строк = smallFile.readlines() или bigFile.seek (0). Я полагаю, что это из-за fout.write (строки) в других утверждениях, которые у меня были. Я изменил его, чтобы продолжить, но это не сработало, потому что оно скопировало существующие строки в старом файле, который был изменен с помощью ввода пользователя, а не на новые строки, которые он скопировал в новый файл. – JoeFin

+0

Хотя я до сих пор не могу получить второй фрагмент, чтобы работать, я добавил другие выражения в первый фрагмент, используя sys.stdout.write (строка), и, похоже, он работает так, как я предполагал. Спасибо всем за помощь. – JoeFin

+0

Ах да, я вижу проблему там - вы выводите изменения в другой файл. Я обновил свой ответ, чтобы исправить эту проблему. –

Смежные вопросы