Печать строк csv-файла, содержащих указанное ключевое слово

#python #csv #if-statement #printing #lines

#python #csv #if-оператор #печать #строки

Вопрос:

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

 csv.field_size_limit(sys.maxsize)
invalids = 0
valids = 0
for f in ['1.csv']:
    reader = csv.reader(open(f, 'rU'), delimiter='|', quotechar='\')
    for row in reader:
        try:
            print row[2] 
            valids  = 1
        except:
            invalids  = 1
print 'parsed %s records. ignored %s' % (valids, invalids)
  

С ключевыми словами:

     for w in ['ford', 'hyundai','honda', 'jeep', 'maserati','audi','jaguar', 'volkswagen','chevrolet','chrysler']: 
  

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

Комментарии:

1. В каких столбцах вы хотели бы искать ключевые слова?

2. Файл представляет собой CSV с одним столбцом (таким образом, первый). Спасибо

3. Таким образом, вам вообще не нужен csv модуль.

4. Пожалуйста, будьте более конкретны в отношении того, что вы пробовали до сих пор. Это покажет, что вы действительно проделали определенную работу, и привлечет больше внимания к вашему вопросу.

Ответ №1:

Ваше предположение верно. Все, что вам нужно сделать, это отфильтровать строки с помощью оператора if, проверяя, соответствует ли каждое поле ключевому слову. Вот как вы это делаете (я также внес некоторые улучшения в ваш код и объяснил их в комментариях.):

 # First, create a set of the keywords. Sets are faster than a list for
# checking if they contain an element. The curly brackets create a set.
keywords = {'ford', 'hyundai','honda', 'jeep', 'maserati','audi','jaguar',
            'volkswagen','chevrolet','chrysler'}
csv.field_size_limit(sys.maxsize)
invalids = 0
valids = 0
for filename in ['1.csv']:
    # The with statement in Python makes sure that your file is properly closed
    # (automatically) when an error occurs. This is a common idiom.
    # In addition, CSV files should be opened only in 'rb' mode.
    with open(filename, 'rb') as f:
        reader = csv.reader(f, delimiter='|', quotechar='\')
        for row in reader:
            try:
                print row[2] 
                valids  = 1
            # Don't use bare except clauses. It will catch
            # exceptions you don't want or intend to catch.
            except IndexError:
                invalids  = 1
            # The filtering is done here.
            for field in row:
                if field in keywords:
                    print row
                    break
# Prefer the str.format() method over the old style string formatting.
print 'parsed {0} records. ignored {1}'.format(valids, invalids)