Форум сайта python.su
У меня немного тупой вопрос.
Есть текстовый файл в котором данные записаны в виде
имя - номер
имя - номер … и так далее.
Нужно все имена присвоить одному списку а номера другому.
Как это сделать?
Офлайн
пробуй парсить файл методом split(' '). вроде так. точно не помню
Офлайн
spis_name = []
spis_nomer = []
for s in open('text.txt').read().split('\n'):
spis_name.append(s.split('-')[0])
spis_nomer.append(s.split('-')[1])
print spis_name, spis_nomer
Офлайн
[guest@station tmp]$ cat file.txt
name1 - 10
name2 - 20
name3 - 30
[guest@station tmp]$
>>> f = open("file.txt")
>>> lines = f.readlines()
>>> for i in range(len(lines)):
... lines[i] = lines[i].rstrip('\n')
...
>>> names = []
>>> numbers = []
>>> for s in lines:
... pair = s.split(" - ")
... names.append(pair[0])
... numbers.append(float(pair[1]))
...
>>> names
['name1', 'name2', 'name3']
>>> numbers
[10.0, 20.0, 30.0]
>>>
Онлайн
Все чудесно за исключеним одной вещи. И read() и readlines() прочитают файл целиком. Если файл небольшой, то не страшно, а с большими могут быть проблемы. Да и зачем вообще весь файл в память тащить, если мы обрабатываем его построчно.
Поэтому вместо вышеуказанных методов я бы посоветовал пользоваться ‘for line in open(“file.txt”):’
Кроме того здесь в качестве целевой структуры предпочтительнее словарь, на мой взгляд. За исключением случаев, если имена не уникальны.
spis = {}
for line in open('text.txt'):
name, code = line.strip().split(' - ')
spis[name] = code
spis = dict([line.strip().split(' - ') for line in open('text.txt')])
Офлайн
Вопщем смысл понятен .
Сейчас попробую.
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.
Офлайн
EdНаверное так надёжнее. а то понатыкивают разное количество пробелов :)
spis = dict()
spis = dict([[item.strip() for item in line.split('-')] for line in open('text.txt')])
Офлайн
ShamaТогда просто без dict. Это будет список списков. Порядок будет сохранен:
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.
spis = [line.strip().split(' - ') for line in open('text.txt')]
Офлайн
>>> fname = "file.txt"
>>> delim = " - "
>>> f = open("file.txt")
>>> lines = f.read().splitlines()
>>> f.close()
>>> names, numbers = [], []
>>> for s in lines:
... pair = s.split(delim) # nam, num = s.split(delim)
... # len(pair) == 2 ?
... names.append(pair[0])
... numbers.append(float(pair[1]))
...
>>> names
['name1', 'name2', 'name3']
>>> numbers
[10.0, 20.0, 30.0]
>>>
spis = [line.strip().split(' - ') for line in open('text.txt')]
Онлайн
Да я уже закончил :) всем спасибо. Спользовал вариант Ed'a.
Офлайн