Как добавить вывод в текстовый файл после каждого 4-го элемента в этом файле - PullRequest
0 голосов
/ 09 июля 2020

Извините, но я новичок в Python, и у меня есть файл с такими данными

x1 y1 z1 w1 x2 y2 z2 w2 .. xn yn zn wn

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

Есть какие-нибудь рекомендации, пожалуйста? Большое спасибо

Обновление: все данные в txt файле представляют собой строки. Мне удалось их преобразовать

f = open("test.txt","r+").readlines()
for line in f:
    tmp = line.strip().split(",")
    values = [float(v) for v in tmp]
    my_data = [1 1 2 23 1]
    a = np.insert(a,slice(0,None,4),my_data)  
    np.savetxt(filename, a)

Добавляющая часть все еще не работала.

Ответы [ 3 ]

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

Вы должны сначала прочитать этот файл в массиве, вставить элементы и сохранить его обратно (при условии, что имя вашего текстового файла filename):

import numpy as np
your_number = #number you want to insert OR a list of numbers you want to insert consecutively in those locations
a = numpy.loadtxt(filename)
a = np.insert(a,slice(0,None,4),your_number)
np.savetxt(filename, a)

Пример:

a = np.zeros(10)
#[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
l = [1,2,3]
a = np.insert(a,slice(0,None,4),l)

вывод

[1. 0. 0. 0. 0. 2. 0. 0. 0. 0. 3. 0. 0.]
0 голосов
/ 12 июля 2020

Ваша проблема - это ваш вопрос. Сначала вы говорите:

У меня есть файл с такими данными

x1 y1 z1 w1 x2 y2 z2 w2 .. xn yn zn wn

Но в вашем коде вы это делаете: split(",") Итак, ваши данные действительно выглядят как :

x1,y1,z1,w1,x2,y2,z2,w2,...,xn,yn,zn,wn

И вы хотите, чтобы ваши данные выглядели так:

x1,y1,z1,w1,v1,x2,y2,z2,w2,v2,...,xn,yn,zn,wn,vn

Откуда берутся значения vn:

my_data = [1 1 2 23 1]

Что мы отмечаем не 'недействительный синтаксис Python, поэтому опубликованный код фактически не запускается. Небольшой объем данных также кажется странным для многострочного ввода, но давайте с ним go. Мы рассматриваем пять наборов из четырех элементов данных или 20 чисел в строке в качестве входных данных. Например, если бы у нас был пятистрочный файл, мы бы увидели что-то вроде:

> cat test.txt
47,18,96,31,48,33,64,21,92,35,78,62,56,23,25,47,35,9,15,9
34,38,64,72,66,69,18,57,92,3,58,17,96,19,53,63,97,86,24,41
2,52,22,59,27,58,82,45,90,24,26,51,47,43,17,14,8,54,4,58
13,99,78,61,99,8,65,10,62,56,91,66,45,18,41,50,75,95,62,80
48,30,18,46,93,82,25,15,93,1,45,88,22,97,54,47,54,64,16,91
>

Добавляющая часть все еще не работала.

Это нормально поскольку добавление на самом деле неправильный путь к go здесь. Чтобы вставить наши новые данные, используя basi c Python sans numpy, я бы сделал что-то вроде:

my_data = [1, 1, 2, 23, 1]

with open("test.txt") as input_file:
    with open("revised.txt", 'w') as output_file:

        for line in input_file:
            array = line.rstrip().split(',')

            for index, datum in enumerate(my_data, 1):
                array.insert(index * 5 - 1, str(datum))

            print(','.join(array), file=output_file)

(Математика индекса index * 5 - 1 сложна, поскольку индексы массива меняются как мы добавляем каждый новый элемент.) В результате получаем:

> cat revised.txt 
47,18,96,31,1,48,33,64,21,1,92,35,78,62,2,56,23,25,47,23,35,9,15,9,1
34,38,64,72,1,66,69,18,57,1,92,3,58,17,2,96,19,53,63,23,97,86,24,41,1
2,52,22,59,1,27,58,82,45,1,90,24,26,51,2,47,43,17,14,23,8,54,4,58,1
13,99,78,61,1,99,8,65,10,1,62,56,91,66,2,45,18,41,50,23,75,95,62,80,1
48,30,18,46,1,93,82,25,15,1,93,1,45,88,2,22,97,54,47,23,54,64,16,91,1
>

Если это не то, что вы пытаетесь сделать, пожалуйста, перепишите свой вопрос, уточнив формат вашего файла, четко указав ваши цели и примеры.

0 голосов
/ 09 июля 2020

Быстро и грязно, если вы не совсем уверены, что элементы w присутствуют, как вы говорите, они могут быть. «данные» - это файл, который вы читаете. Я предполагал, что ваши данные читаются там, где каждая строка соответствует указанному вами формату. Мы разделяем строку на пробелы по умолчанию и получаем массив (ы) представления строки. Затем мы перебираем каждый массив и заменяем старое слово новым словом везде, где мы находим совпадение. новое слово.

  with open("data", "r") as f:
       tot_lines = [line.split() for line in f]
       for line in tot_lines:
           for key, word in enumerate(line):
               if word[0] == "w":
                   line[key] = word + str(9999)
       print(tot_lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...