Python CSV только для записи определенных строк

1

Я пытаюсь прочитать CSV файл с несколькими строками бесполезных данных в начале и извлекать только строки, содержащие соответствующие данные. Я пробовал десятки вариантов моего кода и пытался реализовать его в таких библиотеках, как Pandas, но не имел успеха. Пример CSV читается следующим образом: первые 5 строк, содержащие данные, мне не нужны. Единственные строки, которые я хочу записать в новый файл, являются строками после "SOLUTION".

MWU Checker - 09/12/2018
Server v7.4,Admin,Product
RECOMMEND
Update,Issue Statement,Bypass,Resolution
SOLUTION
IP Address,DNS Name,OS,Status
10.0.0.1,win08a,Windows Server 2008 R2,Up to date
10.0.0.2,win08b,Windows Server 2008 R2,Up to date
10.0.0.3,win08c,Windows Server 2008 R2,Out of date
10.0.0.4,win08d,Windows Server 2008 R2,Up to date
10.0.0.5,win08e,Windows Server 2008 R2,Up to date

Учитывая, что "РЕШЕНИЕ" всегда будет в строке 5, я попытался записать в CSV следующий код:

import csv
from itertools import islice

def checker():
    with open('sample_file.csv', 'r') as csv_in, open('output.csv', 'w', newline='') as csv_out:
    data = csv.reader(islice(csv_in, 5, None), delimiter=',')
    writer = csv.writer(csv_out)
    for row in data:
        print (row)
        writer.writerow(row)

Настолько неудобно, что консоль распечатает правильные данные, показывая только строки 6 или больше, но писатель никогда не обновляет файл "output.csv", он просто записывает точные данные, что и в исходном "sample_file". CSV".

Я уверен, что есть простое решение для этого, но я пробовал множество вариаций моего кода и пытался его также в Pandas, но обнаружил, что Pandas работает не так хорошо, когда у вас есть странно отформатированные CSV, такие как эти.

  • 1
    Я думаю, что ваш код работает. Когда я запустил его, я не смог воспроизвести вашу проблему. output.csv содержит только строки, напечатанные на стандартный вывод. Вы уверены, что не работаете над output.csv в какой-то другой части вашей программы?
  • 0
    @MattMessersmith Ты прав! Другая часть моей программы выполнялась без меня, даже не осознавая этого. Оглядываясь назад, я, вероятно, должен был вырвать мой код выше и протестировать его изолированно, но спасибо!
Теги:
pandas
csv
split
itertools

1 ответ

0

Чтение только строк данных и сохранение в рамке данных pandas должно работать с этим:

import pandas as pd    

df = pd.read_csv('sample_file.csv', skiprows=5)

за которым последует запись в новый файл csv с:

df.to_csv('output.csv', index=False)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню