0

Сохранение результатов в CSV файл с помощью Python

11

Описание проблемы:

Я пытаюсь обработать CSV-файл с помощью кода на Python, но получаю странный вывод. Вот что я пытаюсь сделать: я читаю данные из файла test.csv, подсчитываю количество вхождений значений во втором столбце и записываю строки в новый файл test1.csv, если количество вхождений этого значения больше или равно 4.

Однако вывод не соответствует моим ожиданиям. Код выглядит следующим образом:

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)

Вопрос: Что не так с этим кодом? Почему я получаю неожиданный результат при записи в новый файл CSV?

5 ответ(ов)

0

Я понимаю, что вопрос касается вашей реализации пакета "csv", но для вашего сведения существуют более простые варианты — например, пакет numpy.

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

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

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

names = ['Имя Игрока', 'Foo', 'Bar']
scores = ['Счет', 250, 500]

Вы можете сохранить их следующим образом:

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

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

Имя Игрока,Счет
Foo,250
Bar,500
0

Для того чтобы использовать csv.writer и сохранить отфильтрованные строки в новый CSV файл, вы можете адаптировать ваш код следующим образом:

import csv
import collections

# Считываем данные из исходного CSV файла
with open('thefile.csv', 'r', newline='') as f:
    data = list(csv.reader(f))

# Подсчитываем количество вхождений первой колонки
counter = collections.defaultdict(int)
for row in data:
    counter[row[0]] += 1

# Записываем отфильтрованные данные в новый CSV файл
with open('/path/to/my/csv/file', 'w', newline='') as out_file:
    writer = csv.writer(out_file)
    for row in data:
        if counter[row[0]] >= 4:
            writer.writerow(row)

Вот что следует отметить:

  1. Я изменил 'rb' на 'r' и добавил параметр newline='' при открытии файла. Это поможет избежать проблем с переносами строк, особенно при работе на разных операционных системах.
  2. Для записи в новый файл также добавлен параметр newline='', чтобы избежать дополнительных пустых строк в Windows.
  3. Убедитесь, что вы указали правильный путь к файлу при записи.

Теперь, если в первой колонке строки встречаются 4 или более раз, они будут записаны в новый CSV файл.

0

Для сохранения DataFrame в CSV файл с помощью библиотеки Pandas вы можете использовать метод to_csv(). Вот пример кода:

df.to_csv("your_preferred_name.csv")

В этом коде "your_preferred_name.csv" — это имя файла, в который вы хотите сохранить данные. После выполнения этой команды DataFrame df будет записан в указанный CSV файл в текущем рабочем каталоге. Вы также можете указать различные параметры, такие как разделитель, кодировку и другие, в зависимости от ваших требований.

0

В вашем коде есть небольшая ошибка. Вы не можете закрыть файл, не указав правильный способ записи данных в CSV. Вместо этого вам нужно использовать writerow для записи строк. Вот исправленный пример:

import csv

fileName = "output.csv"
f = open(fileName, "w", newline='')  # Используйте 'w' для текстового режима
writer = csv.writer(f)
entries = "first*second*third".split("*")
writer.writerow(entries)  # Используйте writerow для записи строки
f.close()

Обратите внимание, что при открытии файла вы можете использовать параметр newline='', чтобы избежать дополнительных пустых строк в выходном CSV-файле. После завершения записи мы закрываем файл.

0

В приведенном вами примере кода есть несколько недочетов, которые могут вызвать ошибки. Давайте исправим их и сделаем пример более корректным для работы в Python, так как код выглядит как комбинация Python и Java.

Вот исправленный пример, который создаст CSV-файл, используя Python и модуль csv:

import csv

# Открываем файл для записи в режиме 'w' (запись)
with open("filename.csv", "w", newline='') as csvfile:
    writer = csv.writer(csvfile)
    
    # Разбиваем строку на элементы, используя разделитель '#'
    entries = "first#second#third".split("#")
    
    # Записываем строки в файл
    writer.writerow(entries)

Пояснения:

  1. Используем with open(...) чтобы гарантировать, что файл будет закрыт автоматически после завершения записи.
  2. Открываем файл в режиме 'w' для записи, а не 'wb', поскольку для работы с текстовыми файлами в Python 3 лучше использовать текстовый режим.
  3. Добавляем newline='' при открытии файла, чтобы избежать дополнительных пустых строк в некоторых версиях Windows.
  4. Используем writerow() вместо writerows(), так как у нас есть только одна строка для записи.

Теперь этот код будет работать корректно и создаст файл filename.csv с одной строкой, содержащей значения first, second, third.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь