Переформатирование файла CSV

Я новичок в python и пытаюсь переформатировать файл CSV, он не разделен, поэтому все данные находятся в первом столбце. Файл очень большой, скажем, от 1 ГБ до большого для Excel. Формат файла следующий: обратите внимание, что временная последовательность в старом файле обратная от самой новой к самой старой, вы хотите изменить ее в новом файле от самой старой к самой новой.

old file is
   tagname1 tagname2 value1(t)  value2(t) timestamp(t)
   tagname1 tagname2 value1(t-1)  value2(t-1) timestamp(t-1)
   tagname1 tagname2 value1(t-2)  value2(t-2) timestamp(t-2)

desired file format
   timestamp(t-2)    tagname1       tagname2   value1(t-2)    value2(t-2)
   timestamp(t-1)    tagname1       tagname2   value1(t-1)    value2(t-1)
   timestamp(t)      tagname1       tagname2   value1(t)    value2(t)

Спасибо


person huffytcs    schedule 07.07.2020    source источник
comment
Вы говорите, что все данные находятся в первом столбце, но формат, который вы даете, имеет 5 столбцов?   -  person Feodoran    schedule 07.07.2020
comment
Можете ли вы загрузить весь файл в память (может потребоваться больше, чем размер файла)? Это облегчило бы дело...   -  person Feodoran    schedule 07.07.2020


Ответы (2)


Вы можете сделать это с помощью awk. Эта команда переупорядочивает столбцы и сортирует по первому столбцу и записывает результат в new.csv

awk -F' ' '{print $5" "$1" "$2" "$3" "$4}' OFS=, "old.csv" | sort > new.csv

Для решения Python вы можете использовать для перестановки столбцов Python - переупорядочение столбцов в csv, но сортировка с ограниченным объемом памяти будет намного проще с sort.

person Yann    schedule 13.07.2020

Вы можете использовать известную библиотеку pandas для импорта и изменения файла .csv. Он очень популярен и используется очень часто. Вот код:

import pandas as pd

data = pd.read_csv("file.csv", sep=" ", header=None) # 1
data = data.iloc[::-1] # 2
data = data[[4, 0, 1, 2, 3]] # 3

data.to_csv("out.csv", sep=" ", header=None, index=None) # 4
  1. Read .csv file.
    • Your file doesn't have any column names, so we pass header=None.
    • Используйте пробелы в качестве разделительного символа: sep=" ".
  2. Обратный массив, последние строки будут первыми.
  3. Измените порядок столбцов.
  4. Export your data to another .csv file.
    • Specify separation char: sep=" ".
    • Нам не нужны специальные индексы строк или заголовки: header=None, index=None.
person Szymon Bednorz    schedule 13.07.2020