Сохранить результаты в CSV-файл с Python - PullRequest
29 голосов
/ 27 июля 2010
import csv

with open('test.csv', 'rb') as f:
  data = list(csv.reader(f))

import collections
counter = collections.defaultdict(int)
for row in data:
    counter[row[1]] += 1
for row in data:
    if counter[row[1]] >= 4:
      writer = csv.writer(open("test1.csv", "wb"))
      writer.writerows(row)

Я получаю странный вывод! Что не так с этим кодом?

Ответы [ 6 ]

35 голосов
/ 06 апреля 2016

Я знаю, что вопрос касается реализации вашего пакета "csv", но, к вашему сведению, есть варианты, которые намного проще & mdash; NumPy, например.

import numpy as np
np.savetxt('data.csv', (col1_array, col2_array, col3_array), delimiter=',')

(Этот ответ опубликован 6 лет спустя, для потомков.)

В другом случае, аналогичном тому, о котором вы спрашиваете, скажем, у вас есть два столбца, подобных этому:

names = ['Player Name', 'Foo', 'Bar']
scores = ['Score', 250, 500]

Вы можете сохранить его так:

np.savetxt('scores.csv', [p for p in zip(names, scores)], delimiter=',', fmt='%s')

scores.csv будет выглядеть так:

Player Name,Score
Foo,250
Bar,500
34 голосов
/ 27 июля 2010

Использование csv.writer:

import csv

with open('thefile.csv', 'rb') as f:
  data = list(csv.reader(f))

import collections
counter = collections.defaultdict(int)
for row in data:
    counter[row[0]] += 1


writer = csv.writer(open("/path/to/my/csv/file", 'w'))
for row in data:
    if counter[row[0]] >= 4:
        writer.writerow(row)
5 голосов
/ 27 января 2015

Вы можете закрыть файлы не csv.writer -объекта, это должно быть:

f = open(fileName, "wb")
writer = csv.writer(f)
String[] entries = "first*second*third".split("*");
writer.writerows(entries)
f.close()
2 голосов
/ 27 июля 2010

Простой пример будет что-то вроде:

writer = csv.writer(open("filename.csv", "wb"))
String[] entries = "first#second#third".split("#");
writer.writerows(entries)
writer.close()
0 голосов
/ 20 апреля 2018

это обеспечит точный вывод

import csv

import collections

with open('file.csv', 'rb') as f:

  data = list(csv.reader(f))

counter = collections.defaultdict(int)

for row in data:

    counter[row[0]] += 1

writer = csv.writer(open("file1.csv", 'w'))

for row in data:

    if counter[row[0]] >= 1:

        writer.writerow(row)
0 голосов
/ 15 сентября 2017

Вот как я это делаю

 import csv
    file = open('???.csv', 'r')
    read = csv.reader(file)
    for column in read:
            file = open('???.csv', 'r')
            read = csv.reader(file)
            file.close()
            file = open('????.csv', 'a', newline='')
            write = csv.writer(file, delimiter = ",")
            write.writerow((, ))
            file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...