Csv с подмножеством столбцов

Напишите функцию с именем «filter_columns», которая принимает строку в качестве параметра, представляющего имя файла CSV с 5 столбцами в формате «строка, int, int, int, int», и записывает файл с именем «distant.csv», содержащий только первый и пятый столбцы из входного файла.

import csv
def filter_columns(csvfile):
    with open(csvfile, 'r') as rf:
        reader = csv.reader(rf)
        with open('distant.csv', 'w') as wf:
            writer = csv.writer(wf)
            for item in reader:
                writer.writerow(item[0] + str(int(item[4])))

При вводе в файл items.csv

bed,7,22,137,157
defender,14,58,185,61

Я должен получить

bed,157
defender,61

Но я получаю

b,e,d,1,5,7
d,e,f,e,n,d,e,r,6,1

Как удалить ненужные запятые?

Writer.writerow ([элемент [0], элемент [-1]]), это должно сработать.

Vijay Lingam 26.10.2018 06:34
2
1
321
4

Ответы 4

Из документации, https://docs.python.org/3/library/csv.html, csvwrite.writerow принимает в качестве аргумента итерацию.

Когда вы пишете item[0]+str(int(item[4])), вы создаете строку, которая представляет собой список символов. Следовательно, вывод подобен d,e,f,e,n,d,e,r,6,1.

Я могу попробовать:

import csv
def filter_columns(csvfile):
    with open(csvfile, 'r') as rf:
        reader = csv.reader(rf)
        with open('distant.csv', 'w') as wf:
            writer = csv.writer(wf)
            for item in reader:
                print(item)
                writer.writerow([item[0]]+[str(int(item[4]))])

Вам необходимо отредактировать ваш writerow.

writer.writerow([item[0]]+[item[4]])

Вы передаете строку item[0] + str(int(item[4])) в writer.writerow. Например, для первой строки, которую вы передаете "bed157", когда writer.writerow ожидает итерацию (например, список), он преобразует строку, которую вы передаете, в [«b», «e», «d», «1», «5 "," 7 "].

Вам нужно передать список / кортеж:

import csv

def filter_columns(csvfile):
    with open(csvfile, 'r') as rf:
        reader = csv.reader(rf)
        with open('distant.csv', 'w') as wf:
            writer = csv.writer(wf)
            for row in reader:
                writer.writerow([row[0], str(row[4])])

Это сработало для меня

import csv
def filter_columns (x):
    with open(x, 'r') as f:
        reader = csv.reader(f)
        with open ('museum.csv', 'w') as g:
            writer = csv.writer(g)
            for line in reader:
                writer.writerow((line[0], str(line[2])))

Другие вопросы по теме