2015-11-11 3 views
0

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

Но было бы намного лучше, если я могу сказать программе прочитать часть строки, содержащую строку, которая находится между двумя запятыми.

код у меня сейчас (смотрите ниже)

with open("dvd.txt") as f: 
    for num, line in enumerate(f, 1): 
     if " arnold " in line: 
      num = str(num) 
      print line + '' + num 

печатает каждую строку:

77.224998664,2014-10-19,386.5889,the best arnold ***** ,81,dvd-action,Cheese 5gr,online-dvd-king93,0.19976,18,/media/removable/backup/2014-10-19/all_items/cheese-5gr?feedback_page=1.html, ships from: Germany ships to: Worldwide ,2014-07-30,online-dvd-king,93 1 

Я хотел бы, чтобы напечатать вместо этого:

,the best arnold ***** , 1 

или

the best arnold ***** 1 

Я прочитал this вопрос, но я надеюсь избежать использования CSV.

Если по какой-либо причине сложно найти текст между запятыми или любыми другими конкретными символами, было бы полезно напечатать 3 слова до и после строки, которую я ищу.

+0

Почему не хотите ли вы использовать CSV-модуль для анализа CSV? –

+0

Файлы, в которых я нуждаюсь, это не всегда CSV или подобные электронные таблицы – Isak

+0

Это слишком широко. Есть тонна шагов между «это слово в этой строке» и «печатать только определенные слова из этой строки». Тем более, что вы на самом деле не показали нам формат (ы), с которым работаете. –

ответ

5

Это очень просто сделать с str.split(). Модификация вашей функции следующим образом даст результат, который вы хотите.

with open("dvd.csv") as f: 
    for num, line in enumerate(f, 1): 
     if " arnold " in line: 
      num = str(num) 
      print line.split(',')[3] + '' + num 

str.split разбивает строку в список по указанному разделителю. Чтобы получить доступ к нужной записи списка, просто поставьте соответствующий индекс (который в вашем случае должен быть 3).

Как и в сторону, вы можете получить свой вывод с помощью метода str.format(), чтобы сделать его немного лучше:

print "{} {}".format(line.split(',')[3], num) 

Это также позволит вам удалить num = str(num), так как метод формат может обрабатывать несколько типов данных (в отличие к конкатенации строк, которая не может).

+0

Это отлично работает, спасибо за ваше время! – Isak

3

В качестве альтернативы можно использовать регулярное выражение следующим образом:.

with open("dvd.txt") as f: 
    for num, line in enumerate(f, 1): 
     re_arnold = re.search(r',\s*([^,]*?arnold[^,]*?)\s*,', line) 

     if re_arnold: 
      print '{} {}'.format(re_arnold.group(1), num) 

Это позволило бы извлечь всю запись (между запятыми) независимо от того, какое поле находится в

+0

Если ключ поиска зависит от того, в какой записи он находится (между запятыми), это, безусловно, лучший ответ – wnnmaw

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