#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)