Запишите в файл .txt результаты цикла FOR в python - PullRequest
0 голосов
/ 27 мая 2020

Моя программа выполняет поиск верхнего и нижнего значения из файла .txt в соответствии с этим входным значением.

def find_closer():    
    file = 'C:/.../CariCBABaru.txt'
    data = np.loadtxt(file)
    x, y = data[:,0], data[:,1]
    print(y)

    for k in range(len(spasi_baru)):
        a = y #[0, 20.28000631, 49.43579604, 78.59158576, 107.7473755, 136.9031652, 166.0589549, 
               176.5645474, 195.2147447]
        b = spasi_baru[k]

        # diff_list = []
        diff_dict = OrderedDict()
        if b in a:
            b = input("Number already exists, please enter another number ")
        else:
            for x in a:
                diff = x - b
                if diff < 0:
                    # diff_list.append(diff*(-1))
                    diff_dict[x] = diff*(-1)
                else:
                    # diff_list.append(diff)
                    diff_dict[x] = diff
        #print("diff_dict", diff_dict)
        # print(diff_dict[9])
        sort_dict_keys = sorted(diff_dict.keys())
        #print(sort_dict_keys)
        closer_less = 0
        closer_more = 0
        #cl = []
        #cm = []
        for closer in sort_dict_keys:
            if closer < b:
                closer_less = closer
            else:
                closer_more = closer
                break
            #cl.append(closer_less == len(spasi_baru) - 1)
            #cm.append(closer_more == len(spasi_baru) - 1)
            print(spasi_baru[k],": lower value=", closer_less, "and upper 
            value =", closer_more)
            data = open('C:/.../Batas.txt','w')
            text = "Spasi baru:{spasi_baru}, File: {closer_less}, line:{closer_more}".format(spasi_baru=spasi_baru[k], closer_less=closer_less, closer_more=closer_more)
            data.write(text)
            data.close()
        print(spasi_baru[k],": lower value=", closer_less, "and upper value =", closer_more)

find_closer()

Изображение результатов здесь 1

Затем я хочу записать эти результаты в файл (txt / csv без проблем) в последовательность строк и столбцов. Но проблема, которая у меня есть, файл содержит только одну строку или записал последнее значение, выводимое в терминале, как показано ниже,

Spasi baru: 400, файл: 399.3052727, строка: 415.037138

какие-нибудь предложения по решению моей проблемы, пожалуйста? Я потратил несколько часов, чтобы попробовать различные алгоритмы кода. Я использую Python 3,7

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Лучшее решение - использовать режим w + или a +, когда вы пытаетесь добавить в тот же тестовый файл.

Вместо этого:

data = open('C:/.../Batas.txt','w')

Сделайте следующее:

data = open('C:/.../Batas.txt','w+') 
or
data = open('C:/.../Batas.txt','a+')
0 голосов
/ 27 мая 2020

Причина в том, что вы перезаписываете один и тот же файл снова и снова внутри l oop, поэтому он сохранит только последнее взаимодействие. Ищите способы сохранить файлы, не перезаписывая их.

'r' - режим чтения, который используется, когда файл только читается

'w' - режим записи, который используется для редактирования и записать новую информацию в файл (при включении этого режима все существующие файлы с тем же именем будут удалены)

'a' - режим добавления, который используется для добавления новых данных в конец файла; то есть новая информация автоматически дополняется до конца

'r +' - специальный режим чтения и записи, который используется для обработки обоих действий при работе с файлом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...