Как мне разобрать файл CSV и сузить список по нескольким переменным? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть CSV-файл с несколькими заголовками, такими как Имя, ЦП, Память, ОС и т. Д. Я хочу сузить список CSV, выбрав конкретные параметры для заголовков. Например, if CPU == 2 and Memory == 4GB and OS == Windows, распечатайте Name.

Я использую Python 2.7.

CSV-файл:

Name,CPU,Memory,OS
server1,2,4gb,windows
server2,4,2gb,linux
server3,8,4gb,linux
server4,4,2gb,windows
server5,2,4gb,windows

Мой код:

import csv
with open('test.csv', 'rb') as csv_file:
csv_reader = csv.reader(csv_file)
    for line in csv_reader:
        print(line[1])

Единственное, что я могу сделать, это прочитать столбец ЦП. Я пытался использовать операторы if, но ничего не получалось. Например, if CPU == 2, print не работает.


Благодаря @gboffi я получил сужающийся фрагмент кода ниже:

import csv
with open('test.csv', 'rb') as csv_file:
    dict_reader = csv.DictReader(csv_file)
    for d in dict_reader:
        if d['CPU'] == '2' and d['OS'] == 'windows' and d['Memory'] == '4gb':
            print(d['Name'])

Теперь вопрос в том, как заставить пользователя вводить параметры вместо их жесткого кодирования? Кроме того, как я могу экспортировать результаты в новый CSV со всеми параметрами с заголовками?

1 Ответ

0 голосов
/ 25 июня 2019

Чтобы ответить только на ваш оригинальный вопрос, вот хороший способ сделать это в Python 2 (обратите внимание, что namedtuple не был добавлен в модуль collections до Python 2.6):

from __future__ import print_function
from collections import namedtuple
import csv


input_filename = 'test_fields.csv'

with open(input_filename, 'rb') as csv_file:
    csvreader = csv.reader(csv_file)
    fieldnames = next(csvreader)  # Read header row.
    Record = namedtuple('Record', fieldnames)  # Define fieldnames of a record.

    for row in map(Record._make, csvreader):
        if row.CPU == '2' and row.OS == 'windows' and row.Memory == '4gb':
            print(row.Name)

Извините, я не совсем понимаю ваши дополнительные вопросы о том, как заставить пользователя вводить параметры и экспортировать результаты в новый CSV - поэтому предлагаем вам задать отдельный вопрос только по этим аспектам (только после прочтения документация *1009* модуля csv, чтобы узнать, сможете ли вы разобраться с этим самостоятельно (особенно в части о написании файлов CSV).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...