Преобразование списка строк чисел в кортежи с целыми числами Python3 - PullRequest
0 голосов
/ 19 октября 2018

Пример:

У меня есть файл с именем data.txt, сохраненный в моей системе.Этот файл содержит такую ​​информацию, как:

'Noah,14,233,66,21,88,42'
'Robert,34,11,667,2,785,23'
'Jackson,85,22,73,12,662,5'

и т. Д.,

У меня вопрос, как я могу сделать этот кортеж целыми числами?, Так что это было бы желательно:

('Noah', [14,233,66,21,88,42] ),
('Robert', [34,11,667,2,785,23] )

Я предполагаю, что вы должны использовать цикл for для каждой строки, но я ничего не могу понять.Любая помощь будет оценена!

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Вы можете попробовать это:

   with open(data.txt, 'r') as f:
        lines = [(line.strip().split(',')[0], line.strip().split(',')[1:])for line in f]
   print(lines)

Будет возвращен список кортежей в формате, который вы описали.

0 голосов
/ 19 октября 2018

Согласитесь с другими, что словарь может быть лучшим для этого обстоятельства, но это должно достичь вашей цели:

data= """Noah,14,233,66,21,88,42
Robert,34,11,667,2,785,23
Jackson,85,22,73,12,662,5"""

[(row.split(',')[0], row.split(',')[1:]) for row in data.split('\n')]

Вывод:

[('Noah', ['14', '233', '66', '21', '88', '42']),
('Robert', ['34', '11', '667', '2', '785', '23']),
('Jackson', ['85', '22', '73', '12', '662', '5'])]
0 голосов
/ 19 октября 2018

Предполагая, что текст точно такой, как у вас в вопросе:

import re

input = """
'Noah,14,233,66,21,88,42'

'Robert,34,11,667,2,785,23'

'Jackson,85,22,73,12,662,5'
"""

lines = re.findall("'.*'", input) # Find lines which contain text between single quotes

tuples = []

for line in lines:
  line = line.replace("'", "").split(",") # Remove single quotes, split by comma
  tuples.append((line[0], line[1:])) # Add to tuple

print(tuples)

Что будет печатать:

[
  ('Noah', ['14', '233', '66', '21', '88', '42']), 
  ('Robert', ['34', '11', '667', '2', '785', '23']), 
  ('Jackson', ['85', '22', '73', '12', '662', '5'])
]

Сначала мы берем все строки, которые имеют что-то между двумя одинарнымицитаты.Затем возьмите одинарные кавычки и создайте массив, разделив его запятыми.Наконец, создайте кортеж с первым элементом и вложенным массивом второго до последнего элемента.

0 голосов
/ 19 октября 2018

Если вы хотите точно такой же вывод, который вы упомянули, вы можете разбить каждую строку на , и сохранить ее в кортеже,

x = 'Noah,14,233,66,21,88,42'
# split string on , 
x = x.strip().split(',')
# x[0] is name, while x[1]....x[n] are numbers
y = (x[0], x[1:])
print(y)

Выходы,

('Noah', ['14', '233', '66', '21', '88', '42'])

Очевидно,сначала вам нужно прочитать каждую строку из файла отдельно, поэтому выведите

with open("file_name", "r") as file:
    for line in file:
      line = line.strip().split(',')
      output = (line[0], line[1:])

,

('Noah', ['14', '233', '66', '21', '88', '42'])
('Robert', ['34', '11', '667', '2', '785', '23'])
('Jackson', ['85', '22', '73', '12', '662', '5'])
...