Python конвертирует txt в массив

Я читаю файл .dat с файлового сервера samba, который содержит некоторые данные датчика ветра. Этот файл содержит заголовок с некоторой информацией (строки 1,3 и 4), строку с названиями датчиков (2-я строка) и показания датчиков на теле (144 строки, 1 строка каждые 10 минут), например :

"DataFormat","Anemometric tower","Datalogger","SomeCode","LoggerOS","LoggerFileSystem","AnotherCode","Table1"
"TIMESTAMP","RECORD","Precipit1","Barometer1","Temperature1","Humidity1","Anemometer1","Windvane1","Anemometer2","Windvane2","Battery1"
"TS","RN","","hPa","C. Deg","%RH","m/s","Deg","m/s","Deg","Volts"
"","","Smp","Avg","Avg","Avg","Avg","Avg","Avg","Avg","Avg"
"2019-06-19 00:10:00",1211,"NAN",921.014,19.57733,98.29526,10.76701,137.6863,10.68348,139.7062,11.91,
"2019-06-19 00:20:00",1212,"NAN",920.9402,19.44474,98.67733,9.991986,141.5792,9.892648,143.3559,11.35
"2019-06-19 00:30:00",1213,"NAN",920.6142,19.45635,99.00026,10.80979,148.0094,10.63116,150.0893,11.41
...more 141 lines...

Моя цель - преобразовать необработанный текст в таблицу (например, я знаю, что все значения из столбца 4 принадлежат датчику Barometer1).

Мне удалось сделать PHP-скрипт, который работает, я читаю весь файл до конца файла, добавляю к строке, взорваюсь с разделителем EOL (результирующий массив строк), затем, наконец, взрываюсь с разделителем ',' (запятая) (массив массива ?)

       $data = '';
       while (!feof($stream)) {
           $data .= fread($stream, 8192);
       }
       $lines = explode(PHP_EOL, $data);
       foreach ($lines as $line) {
           $array[] = explode(",", $line);
       }

Затем я перебираю $array[$row][$col], составляю список для каждого типа датчика и вставляю каждый список в соответствующую таблицу базы данных.

Но мне это нужно для работы со скриптом питон, поэтому я попробовал

    data = file_obj.read()
    file_obj.close()    

    lines = data.split('\n')
    array = []
    for line in lines:
        array[lines.index(line)] = line.split(',')

Печать данные на терминале возвращает полный текст в строке, печать линии на терминале возвращает каждую строку (например: print(lines[1])), а множество возвращает ошибку

    array[lines.index(line)] = line.split(',')
IndexError: list assignment index out of range

Работа с библиотекой писмб для получения file_obj из общего ресурса samba

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Для этой цели лучше использовать библиотеку python pandas для организации данных в фрейме данных.

например

import pandas as pd
pd.read_csv('yourfile.dat',
            header=None, sep='\s\s+', engine='python')

Я сейчас узнаю о пандах. Эта библиотека может помочь мне вставить данные в базу данных? Если нет, то зачем мне добавлять в него еще один программный слой? Я спрашиваю это, потому что в моей голове моя задача: прочитать файл > организовать строки таблицы в списки (например: anemometer1List= ['2019-06-19 00:10:00' => 10.76701, '2019-06-19 00 :20:00' => 9.991986]...), > вставить список в базу данных. Если я использую pandas, я должен прочитать файл> организовать данные> вставить в фрейм данных pandas> вставить фрейм данных в базу данных

dwenzel 12.07.2019 22:37

Да, вы можете напрямую вставить df в базу данных. Можно погуглить по своей базе. например df.to_sql('table', engine, if_exists='replace')

Abdul Hannan 13.07.2019 10:10

Альтернативное решение состоит в том, чтобы превратить ваши строки в списки и добавить их в фрейм данных:

import pandas as pd

list=[["DataFormat","Anemometric tower","Datalogger","SomeCode","LoggerOS","LoggerFileSystem","AnotherCode","Table1"]]

df=pd.DataFrame(list,columns=['col1'])

Чтобы запрограммировать подобную логику (как на php, так и на python), мне удалось заставить ее работать с помощью добавить функция.

Но, как уже упоминалось, библиотека панды также может помочь.

data = file_obj.read()
file_obj.close()    

lines = data.split('\n')
array = []
for line in lines:
    array.append(line.split(','))

Другие вопросы по теме