2016-12-26 3 views
0

Я пытаюсь изучить бит Python, и моя цель - открыть gzip file, ввести поисковый запрос, а затем распечатать его и в конечном итоге вывести результаты в файл.Интеграция grep в Python

import gzip 
file = raw_input('Input Filepath: ') # input file path 
with gzip.open(file, 'rb') as f: # opens gzip fil .gz 
    file_content = f.read() # reads the contents 
    grep = raw_input('Enter Search: ') # grep asks for output 
print(file_content) # prints it in console 

Я также попытался с print(file_content, grep), но он возвращает только первую находку.

+1

Пожалуйста, укажите пример содержимого вашего файла, а также ожидаемый результат для заданного значения grep. – ettanany

+0

Не уверен, что вы пытаетесь сделать здесь. 'grep' - утилита командной строки. Вы пытаетесь воспроизвести его поведение здесь? –

+0

@ettanany Я пытаюсь открыть gz-файл, а затем выводить только информацию, которую я вхожу в «поиск». Я думал об использовании grep, так как я знал/знал лучше всего, чтобы получить результаты, просто делая – JJWatt

ответ

0

Утилита grep будет искать линии, соответствующие заданному шаблону.

Чтобы сделать это в Python, вам нужно прочитать файл построчно, а затем искать каждую строку на строку, которую вы хотите найти:

import gzip 

matched_lines = [] 
file = raw_input('Imput Filepath: ') 
with gzip.open(file, 'rb') as f: 
    grep = raw_input('Enter Search: ') 
    for line in f: # read file line by line 
     if grep in line: # search for string in each line 
      matched_lines.append(line) # keep a list of matched lines 

file_content = ''.join(matched_lines) # join the matched lines 

print(file_content) 
+0

Это работало по назначению. Он выводит результаты, которые мне нужны. Насколько плохо я использовал свой код заранее? Я читал readlines(), это плохо, потому что он захватывает информацию в памяти. – JJWatt

+0

@JJWatt. Да, 'readlines()' сначала помещает все строки в список, поэтому для очень большого файла он может использовать много памяти. Однако иногда вам приходится так поступать (например, если вы хотите отсортировать все строки). – ekhumoro

0

Если я правильно понимаю ваш вопрос, это звучит, как вы пытается сделать что-то вроде

with gzip.open(file, 'rb') as f: #opens gzip fil .gz 
    grep = raw_input('Enter Search: ') 
    file_content = [line for line in f.readlines() if re.match(grep, line)]