2016-10-06 2 views
0

Извините, очень новичок в Python и действительно может использовать некоторую помощь.Как искать строку CSV для строки в определенном столбце, печатать всю строку в файл, если найден

У меня есть большой CSV-файл, элементы, разделенные запятыми, которые я пытаюсь выполнить с помощью Python. Ниже приведен пример строки в CSV.

123123, JOHN SMITH, SMITH FARMS, A, N, N, 12345 123 AVE, CITY, NE, 68355, US, 12345 123 AVE, CITY, NE, 68355, US, (123) 555-5555, (321) 555-5555, JSMITH @ HOTMAIL.COM, 15-JUL-16,11111,2013,22-DEC-93, NE, 2,1 \ par

Я бы хотел, чтобы мой код сканировал каждую строку и посмотрите только на 9-й элемент (состояние). Для каждого элемента, который соответствует моему запросу, я хотел бы, чтобы вся строка была записана в CSV.

Проблема у меня в том, что мой код найдет каждый появление моего запроса по всей строке, а не только 9-й элемент. Например, если я сканирую поиск «NE», он напишет вышеприведенную строку в моем CSV, а также тот, который содержит строку «NEARY ROAD».

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

Я перечислил свою кодировку ниже:

import csv 

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf: 
    reader = csv.reader(f, delimiter=',') 
    writer = csv.writer(outf) 
    for line in f: 
     if "NE" in line: 
      print ('Found: []'.format(line)) 
      writer.writerow([line]) 

ответ

2

Вы на самом деле не с помощью reader читать входной CSV, вы просто читаете необработанные строки из самого файла.

Неподвижная версия выглядит следующим образом (непроверенные):

import csv 

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf: 
    reader = csv.reader(f, delimiter=',') 
    writer = csv.writer(outf) 
    for row in reader: 
     if row[8] == 'NE': 
      print ('Found: {}'.format(row)) 
      writer.writerow(row) 

Изменения заключаются в следующем:

  • Вместо итерация строк входного файла, мы перебирать строки разобран reader (каждый из которых является list каждого из значений в строке).
  • Мы проверяем, соответствует ли 9-й элемент в строке (то есть row[8]) равным "NE".
  • Если это так, мы выводим эту строку в выходной файл, передавая ее, как есть, в метод writerow автора.
  • Я также исправил опечатку в вашем заявлении print - метод format использует скобки (не квадратные скобки) для маркировки мест замены.
+0

Это отлично работает! Спасибо! –

+0

@ J.Folkens: не проблема! – Mac

0

Этот фрагмент кода должен решить вашу проблему

import csv 

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf: 
    reader = csv.reader(f, delimiter=',') 
    writer = csv.writer(outf) 
    for row in reader: 
     if "NE" in row: 
      print ('Found: {}'.format(row)) 
      writer.writerow(row) 

if "NE" in line в коде пытается выяснить, является ли "NE" подстроку строки line, которая работает не по назначению. line s - это необработанные строки вашего входного файла.

Если вы используете if "NE" in row:, где row анализируется строка вашего входного файла, вы выполняете точное сопоставление элементов.

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