2013-09-25 2 views
0

Я запускаю скрипт python следующим образом, вторая команда представляет собой разделенный запятой (",") разделяемый входной файл..am пытается разбить это средство на основе "," и продолжать добавлять вывод каждого файла filter_log для каждой строки в output.txt 1.) Получаем ошибку ниже при этом? 2.) как сохранить добавление к output.txt для каждой строки поиска, переданной во втором аргументе?NameError: name 'split' не определен

ОШИБКА: -

string = split(",",sys.argv[2]) 
NameError: name 'split' is not defined 

ПРИМЕНЕНИЕ: -

python test.py input.log loc\modem,loc\data 

КОД: -

import sys 
import string 

def filter_log(input_file, output_file, strs): 
    with open(input_file, "r") as input, open(output_file, "w") as output: 
     output.writelines(filter(lambda x: all([s in x for s in strs]), input.readlines())) 

# here is just searched for "Warning", add other stuff 
#filter_log("input.txt", "output.txt", ["Warning"]) 

print sys.argv[1] 
print sys.argv[2] 
for arg in sys.argv[2]: 
    string = split(",",sys.argv[2]) 
    filter_log(sys.argv[1], "output.txt", ["Warning",string]) 

ответ

7

У вас есть ошибка синтаксиса (EDIT: не ошибка синтаксиса, но просто ошибка). Вы имели в виду:

string = sys.argv[2].split(",")

+4

Также неверно использовать имена типа 'string' в качестве имен переменных. В этом случае вы ранее (без необходимости) импортировали модуль 'string'; Объявление 'string = sys.argv [2] .split (", ") означает, что у вас больше нет имени для ссылки на этот модуль. –

+2

Где ошибка синтаксиса в его коде? – abarnert

+0

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

4
  1. import делает не работать как Кассиопеяне include. Он создает объект модуль с именем модуля, который можно использовать для ссылки на атрибуты, то есть использовать string.split(sys.argv[2], ',') и не split(sys.argv[2], ',')
  2. Почти все функции в string модуля являются устаревшими. Строки имеют методы, используйте их! sys.argv[2].split(',')
  3. string = split(",",sys.argv[2]) Вы понимаете, что после выполнения этого задания вы будете не иметь возможность ссылаться на модуль string? Никогда не используйте имя встроенной функции/типов/модулей как имена переменных!
Смежные вопросы