Напишите функцию с именем «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
Как удалить ненужные запятые?
Из документации, 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])))
Writer.writerow ([элемент [0], элемент [-1]]), это должно сработать.