Nano Hash - криптовалюты, майнинг, программирование

Удалить запятые из большого CSV (1 ГБ)

У меня есть большой файл CSV (1 ГБ), из которого я хотел бы удалить запятые. Все данные представляют собой положительные целые числа. Методы, которые я пробовал, включают dlmwrite с пробелом в качестве разделителя, но вывод затем выводится в десятичном формате. Я также пытался использовать команду fprintf, но тогда я теряю форму матрицы (т.е. все данные отображаются в одной строке или столбце).

Таким образом,

Есть ли простой способ чтения из CSV (input.txt):

1, 2, 3, 4, 5
2, 3, 4, 5, 6

а затем вывести в текстовый файл (output.txt) в виде:

1 2 3 4 5
2 3 4 5 6
31.07.2012

  • Matlab — это то, с чем у меня больше всего опыта, но я также вникаю в python. Я подозреваю, что Python лучше подходит для этого, но я подумал, что сэкономлю время, используя то, что уже знаю. Однако это оказалось сложнее, чем я ожидал, поэтому я открыт для других идей. 31.07.2012
  • Как предположил hroptatyr, tr, вероятно, лучший инструмент для работы, но вместо удаления запятых вы можете заменить их пробелом: tr ',' ' '. 31.07.2012
  • какую версию питона вы используете? 01.08.2012
  • Если ваша конечная цель состоит в том, чтобы представить это в какой-то анализируемой форме, тогда вам следует использовать pandas, которые могут читать практически любой текстовый файл, содержащий данные. Поскольку это выглядит как простой случай, вы даже можете просто вызвать pandas.read_csv('input.txt') и получить обратно DataFrame. Почему вы хотите записать такой огромный файл обратно в текст? Это совсем не полезно... 23.06.2013
  • Кроме того, MATLAB совершенно не умеет читать текстовые файлы. 23.06.2013

Ответы:


1

В Python, если формат действительно такой простой (и после каждой запятой уже есть пробел):

with open("infile.csv") as infile, open("outfile.csv", "w") as outfile:
    for line in infile:
        outfile.write(line.replace(",", ""))

Если вы не уверены в пробелах:

import re
with open("infile.csv") as infile, open("outfile.csv", "w") as outfile:
    for line in infile:
        outfile.write(re.sub(r"\s*,\s*", " ", line))
31.07.2012
  • Это правильно, но для текстового файла размером 1 ГБ это будет чрезвычайно медленно. 23.06.2013

  • 2

    Лично мне нравится использовать sed, программу командной строки, которая заменяет строки.

    Это приложение доступно в Linux и через установку Cygwin также в Windows.

    С использованием

    sed -i 's/,/ /g' filename
    

    все запятые в файле заменены пробелами.

    06.08.2012

    3

    python имеет модуль csv для ввода/вывода файла CSV.

    import csv
    with open("input.txt") as infile:
        with open("output.txt", "w") as outfile:
            for line in csv.reader(infile):
                outfile.write(' '.join(line)+'\n')
    

    Точно так же у Matlab есть функция csvread

    M = csvread('input.txt');
    dlmwrite('output.txt', M, 'delimiter', ' ', 'precision', '%ld');
    

    но у этого кода есть проблемы. Сначала вы читаете файл одним большим куском, а не построчно: может не хватить памяти. Второй csvread всегда возвращает массив double, поэтому точность может быть потеряна при чтении больших целых чисел. Наконец, если input.txt имеет переменное количество столбцов, матрица M заполняется нулями.

    решение python настоятельно рекомендуется!

    01.08.2012

    4

    Вы можете читать строку за строкой, используя fgetl, из файлового дескриптора следующим образом:

    fid=fopen('file.csv');
    if (fid==-1)
        return
    end
    sl=fgetl(fid);        
    while (~feof(fid))
        sl=fgetl(fid);  
        icol=find(sl==',');
    end  
    
    fclose(fid);
    

    В sl вы можете заменить пробелы и снова записать на диск

    31.07.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..