Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 9, 2010 10:56:17

Shama
От:
Зарегистрирован: 2009-07-19
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение с файла

У меня немного тупой вопрос.
Есть текстовый файл в котором данные записаны в виде
имя - номер
имя - номер … и так далее.
Нужно все имена присвоить одному списку а номера другому.
Как это сделать?



Офлайн

#2 Авг. 9, 2010 11:04:31

drsmyrke
От:
Зарегистрирован: 2010-08-04
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение с файла

пробуй парсить файл методом split(' '). вроде так. точно не помню



Офлайн

#3 Авг. 9, 2010 12:21:34

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Чтение с файла

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



Офлайн

#4 Авг. 9, 2010 12:26:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9960
Репутация: +  856  -
Профиль   Отправить e-mail  

Чтение с файла

[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]
>>>



Онлайн

#5 Авг. 9, 2010 13:45:30

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение с файла

Все чудесно за исключеним одной вещи. И 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')])



Офлайн

#6 Авг. 9, 2010 15:12:11

Shama
От:
Зарегистрирован: 2009-07-19
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение с файла

Вопщем смысл понятен .
Сейчас попробую.
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.



Офлайн

#7 Авг. 9, 2010 17:42:06

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение с файла

Ed
spis = dict()
Наверное так надёжнее. а то понатыкивают разное количество пробелов :)
spis = dict([[item.strip() for item in line.split('-')] for line in open('text.txt')])



Офлайн

#8 Авг. 9, 2010 21:02:23

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение с файла

Shama
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.
Тогда просто без dict. Это будет список списков. Порядок будет сохранен:
spis = [line.strip().split(' - ') for line in open('text.txt')]



Офлайн

#9 Авг. 10, 2010 01:58:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9960
Репутация: +  856  -
Профиль   Отправить e-mail  

Чтение с файла

>>> 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]
>>>
Ed,
spis = [line.strip().split(' - ') for line in open('text.txt')]
а если в файле есть неправильные строки, типа идут три правильные строки, потом неправильная, потом опять правильные, потом опять неправильные
получится оно будет читать файл до конца, а по твоему принципу (файл нужно обрабатывать построчно) оно должно выдать ошибку на первой неправильной строке



Онлайн

#10 Авг. 10, 2010 11:37:23

Shama
От:
Зарегистрирован: 2009-07-19
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение с файла

Да я уже закончил :) всем спасибо. Спользовал вариант Ed'a.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version