Копировать строки из одного файла в другой - PullRequest
3 голосов
/ 01 марта 2012

Я пытаюсь создать скрипт, который позволит мне назначить входной файл, взять строки из этого файла и скопировать их в отдельно назначенный конечный файл. До сих пор я был в состоянии приблизиться к своей цели, но проблемы, с которыми я сталкиваюсь и на которые я не могу найти ответ (что я могу понять, по крайней мере), заключаются в том, что когда я выполняю поиск по моей строке данных, если слово "not" или "is" или любой другой термин сценария находится в моей строке, он действует так, как если бы я искал что-то вроде "This is not want I want", он переводит оператор not в действие и ничего не копирует. Поэтому я думаю, что мой вопрос заключается в том, что я могу сделать, чтобы это не произошло (я добавил свой сценарий внизу, будьте добры, моя первая попытка =)

Мой второй вопрос, возможно, задает немного слишком много из программы, но я все равно задам его. Как и в предыдущем примере, у меня есть текстовый файл с 1000 строками (отдельные строки не похожи на абзац), и 250 из них начинаются с «Это строка, которую я хочу скопировать», но каждый из них говорит отдельную причину ( это строка, которую я хочу скопировать, потому что она классная, фиолетовая и т. д. и т. д.), когда она сидит сейчас, мой сценарий просто вытянет первое «Это часть, которую я хочу скопировать» и оставлю на этом, есть ли Может ли он захватить остаток строки из всех строк?

Опять же, это может быть легко, но поскольку я пытаюсь получить самообразование, хотя методом проб и ошибок некоторые термины, с которыми я сталкиваюсь при устранении неполадок, столь же запутаны, как и проблемы, с которыми я сталкиваюсь =)

#This will let you search for a string in a file and transfer it to another file
#It will search for texts or numbers

print "This is a tool to search one file and transfer information to another."
print
#select source file
a=open(raw_input("Enter full path of source file using using \\ instead of \: "), "r")
#select destination file
b=open(raw_input("Enter full path of destination file using \\ instead of \: "), "a")       
a
b
#actual copy command
copy=raw_input("What are you searching for: ")
for line in a.readlines():
    if copy in line:
        b.write(copy + '\n')
        yes='y'
        for again in raw_input("Would you like to search for another line? y/n: "):
            if again in yes:        
                copy=raw_input("What are you searching for: ")
                if copy in line:
                    b.write(copy + '\n')
    b.close
    a.close

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Если я ищу что-то вроде «Это не хочу, я хочу», это приводит в действие оператор not и ничего не копирует.

Это невозможно.На самом деле, я только что попробовал, и это не так.Должно быть что-то еще, что вы делаете неправильно.

есть ли возможность, чтобы он захватил оставшуюся часть строки из всех строк?*

b.write(copy + '\n')

с

b.write(line)
0 голосов
/ 01 марта 2012

Возможно, использование модуля Python re будет более полезным здесь. Например:

#All your existing code to retrieve input and output file names, etc.
#Convert the user's search string into a raw string
copy = eval("r'%s'" % (raw_input("What are you searching for?: "),))

import re

searchRegEx = re.compile(copy)

for line in a:
  matched = searchRegEx.search(line)

 if matched != None:
    b.write(line)

Во-вторых, вместо того, чтобы иметь вложенный цикл, спрашивающий, хочет ли пользователь искать другую строку (в то время как вы уже ищете одну), возможно, было бы более целесообразно обернуть всю строку «Получить ввод строки поиска и выполнить логику поиска» в функцию и вызывайте ее несколько раз, пока пользователь все еще хочет продолжить поиск (т. е. использовать логическое значение для управления потоком к нему, для которого установлено значение True, если пользователь вводит «y», когда вы их спрашиваете).

Ура!

0 голосов
/ 01 марта 2012

Вы только что переключились с использования input на raw_input? Проблемы, которые вы описываете (также тот факт, что вам нужно удвоить обратную косую черту в пути) могут возникнуть из-за использования input () в python 2 для чтения из терминала. raw_input не должно быть такой проблемы.

Ваша вторая проблема ясна: не делай b.write(copy + '\n'), делай

b.write(line)

(line уже содержит символ новой строки, как только что указал @lars)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...