Найти - Пользователи
Полная версия: Чтение с файла
Начало » Python для новичков » Чтение с файла
1 2
Shama
У меня немного тупой вопрос.
Есть текстовый файл в котором данные записаны в виде
имя - номер
имя - номер … и так далее.
Нужно все имена присвоить одному списку а номера другому.
Как это сделать?
drsmyrke
пробуй парсить файл методом split(' '). вроде так. точно не помню
sp3
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
py.user.next
[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]
>>>
Ed
Все чудесно за исключеним одной вещи. И 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')])
Shama
Вопщем смысл понятен .
Сейчас попробую.
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.
knkd
Ed
spis = dict()
Наверное так надёжнее. а то понатыкивают разное количество пробелов :)
spis = dict([[item.strip() for item in line.split('-')] for line in open('text.txt')])
Ed
Shama
Да со словарем было бы удобней, но так ведь порядок будет случайный, а мне его нужно сохранить.
Тогда просто без dict. Это будет список списков. Порядок будет сохранен:
spis = [line.strip().split(' - ') for line in open('text.txt')]
py.user.next
>>> 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')]
а если в файле есть неправильные строки, типа идут три правильные строки, потом неправильная, потом опять правильные, потом опять неправильные
получится оно будет читать файл до конца, а по твоему принципу (файл нужно обрабатывать построчно) оно должно выдать ошибку на первой неправильной строке
Shama
Да я уже закончил :) всем спасибо. Спользовал вариант Ed'a.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB