Поиск неизвестных чисел в текстовом формате и их построение

#python #python-3.x #list #variables #import

#python #python-3.x #Список #переменные #импорт

Вопрос:

Недавно я начал оценивать некоторые данные с помощью Python. Однако, кажется сложным оценивать мои записанные данные и манипулировать ими.

Например, мой файл .txt состоит из:

 1551356567 0598523403 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523436 0000003362 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523469 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523502 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0      
1551356567 0598523766 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523832 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523865 0000003314 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523898 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    
1551356567 0598523931 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   
1551356568 0598524756 0000003384 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0  
  

Важными значениями являются только третий столбец (с 3362) и первый (1551 …), при этом третий столбец должен быть осью x, а первый — осью y. Важны только строки со значением, отличным от 0. Идея состоит в том, чтобы создать цикл, который ищет значения в третьем столбце, и если есть значение != 0, то это значение должно быть сохранено в x-списке (x), а соответствующее значение y — в y-списке (y).

В настоящее время мой скрипт для чтения и обработки данных выглядит следующим образом:

 import numpy as np

rawdata = np.loadtxt("file.txt")
num_lines = sum(1 for line in open("file.txt"))

with open("file.txt") as hv:  
   line = hv.readline()

x = list()
y = list()

i = 1
j = 0
while line != num_lines:
    if rawdata[j][2] != 0:
        x = x.append(rawdata[j][2])
        y = x.append(rawdata[j][0])
    else:
        j  = 1
    if i == num_lines:
        break
    i  = 1

print(x)
print(y)
  

Я думаю, что есть некоторые проблемы с локальными и глобальными переменными, но я не смог их решить, чтобы, скажем, «обновить» мои списки новыми значениями. В конце должен быть список, содержащий только:

 [3362, 3314, 3384] for x and

[1551356567, 1551356567, 1551356568] for y
  

У вас есть какие-либо предложения, как я могу «обновить» свой список?

Ответ №1:

По мере чтения каждой строки разделяйте ее пробелами и преобразуйте каждый столбец в целые числа:

 x = []
y = []

with open('file.txt') as f:
    for line in f:
        data = [int(col) for col in line.split()]
        if data[2] != 0:
            x.append(data[2])
            y.append(data[0])

print(x)
print(y)
  

Вывод:

 [3362, 3314, 3384]
[1551356567, 1551356567, 1551356568]