Как добавить число в текстовый файл после указания c индекса - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в Python, и у меня есть вопрос, может ли кто-нибудь помочь, пожалуйста.

У меня есть текстовый файл. Он имеет такую ​​структуру, как

-0.368242, -0.256205, -0.893732,2.27449e-17, -0.346157, -0.349505, -0.870645,1.21266e-17, -0.239658,0.461163, -0.854338,7.31435e- 19, -0.21521, -0.21521, -0.213487, -0.213487, -0.952947, -4.74783e-19

все данные в файле являются строковыми. Мне нужно добавить к нему данные, поступающие из функции. Этот тип данных - массив numpynd. Данные выглядят так

[ 1 2 3 4 5 671 122 1 39 ...]

Я хотел бы добавить этот массив после каждого 4-го элемента в файле.

Пример:

-0.368242,-0.256205,-0.893732,2.27449e-17,[ 1 2 3 4 5 671 122 1 39 ...], 
-0.346157,-0.349505,-0.870645,1.21266e-17,[ 1344 26 73 84 5 671
122 1 39 ...]

Новые данные массива меняется со временем, это данные, поступающие примерно на 1 минуту, поэтому первые данные прибывают и должны быть добавлены после 4-го элемента, а вторые данные прибывают и будут добавлены после следующей серии элементов

пример

data 1= [1 2 3 4]
data 2 = [5 6 7 88]

вывод должен быть в файле, например:

-0.368242,-0.256205,-0.893732,2.27449e-17,[1 2 3 4], 
-0.346157,-0.349505,-0.870645,1.21266e-17,[5 6 7 88]

Я пробовал это, но никогда не имел хороших результатов.

with open("test.txt", "a") as f:
   tmp = line.strip().split(",")
   values = [float(v) for v in tmp]  # CONVERTING THE VALUES TO FLOAT
   insertation = np.insert(f, slice(0, None, 4), my_new_data)
   f.write(','.join(str(v) for v in insertation.flat) + '\n')

любая помощь будет оценена . Спасибо :)

Обновление: входной файл был создан из этой функции

    f = open("test_desc2.txt", "w")  # Erases the file content.
    f.close()
       

>  `HERE TRINGULATE FUNCTION EXISTS.`

    f = open("test.txt", "a")
    f.write(','.join(str(v) for v in self.tringulate.T.flat) + '\n')
    f.close()

1 Ответ

1 голос
/ 10 июля 2020

Боюсь, вы не сможете использовать Numpy для выполнения своей задачи. Причина в том, что массивы Numpy имеют каждый элемент одного и того же типа, тогда как ваш список, по крайней мере, после вставки, содержит смесь float s и (вложенных) списков .

Итак, я придумал решение, как вставить вашу последовательность списков в plain pythoni c list.

Я оставил прочитав ваш список из текстового файла (в начале) и записав его обратно в этот файл (в конце).

Предположим, что ваши исходные переменные следующие:

  1. Список источников (для вставки):

     a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5]
    
  2. Последовательности для вставки:

     seqToIns = [[51.0, 52.0], [71.0, 72.0]]
    
  3. Шаг между последовательными точки вставки:

     step = 4
    

Чтобы обойти проблему «перемещения индексов» (после каждой вставки), идея состоит в том, чтобы вставить ваши последовательности в обратном порядке . Чтобы перебрать их, вы можете использовать seqToIns[::-1].

Для создания (также обратного) списка целевых индексов вы можете использовать range(len(seqToIns) * step, 0, -step).

Таким образом, задача сводится к вызову вставьте в al oop, на основе "заархивированных" результатов обоих приведенных выше выражений:

for ind, seq in zip(range(len(seqToIns) * step, 0, -step), seqToIns[::-1]):
    a.insert(ind, seq)

Когда вы снова распечатаете свой список, вы получите:

[0.1, 0.2, 0.3, 0.4, [51.0, 52.0], 0.5, 0.6, 0.7, 0.8, [71.0, 72.0], 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...