Python: получение двух отдельных значений списка в одной строке файла - PullRequest
0 голосов
/ 03 января 2019

Я работаю над кодом в python, где в одной конкретной строке файла есть два отдельных значения. Я хочу получить их обе как отдельные части в списке для matplotlib. Это код, который у меня есть:

with open('data.txt') as data_file:

    def process(line):
        line = line.rstrip(data_file)
        line = line.split('.')[1]
        line = line.split(',')
        return line


    x = list()
    y = list()

    counter = 0

    for line in data_file:
        if (counter == 3) or (counter == 4):
            result = process(line)
            x.append(int(result[0]))
            y.append(int(result[1]))
        counter += 1

print(x)
print(y)

Ошибка говорит:

line = line.rstrip(data_file)
TypeError: rstrip arg must be None or str

Пример файла:

hi
hi
67, 78
2345, 45677

Может кто-нибудь помочь мне исправить эту ошибку или предоставить лучший способ добиться того же результата. Любая помощь приветствуется!

Большое спасибо!

1 Ответ

0 голосов
/ 03 января 2019

вот что я могу придумать:

import re

regex = r'[\d]{1,3}, [\d]{1,3}'
result = []
with open('sample.txt') as f:
    lines = f.readlines()
    for line in lines:
        match = re.findall(regex, line)
        if match != []:
            splitted = match[0].split(',')
            #the values are mapped to a list containing floating point numbers
            mapped = list(map(float, splitted))
            #and then are appended to a list that will contain all of
            #the lines that have the numbers on it
            result.append(mapped)

    print(result)
    #this is how you could access each line in result
    for list in result:
        print(list)

выход

[[67.0, 78.0], [25.0, 18.0]] #result is a list containing all lines that have the pattern <number>, <number>
[67.0, 78.0] #the first line that matches the pattern
[25.0, 18.0] #the second one

здесь используются регулярные выражения для поиска чисел до 3 цифр (но вы можете изменить это на любое, что хотите) в соответствии с шаблоном <number>, <number>

если он соответствует шаблону, он разбивает два числа на ,, создавая список, содержащий эти два значения, и добавляет их в список результатов

Надеюсь, это поможет.

Любые вопросы, не стесняйтесь задавать.

Редактировать

Я использую это как пример файла, чтобы проиллюстрировать вам:

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