Найти - Пользователи
Полная версия: из строки в массив
Начало » Python для новичков » из строки в массив
1 2 3
Elena
Здравствуйте. В питоне я только только начала разбираться и мне надо написать функцию для преобразования данных файла формата .txt в массив. (в файле находятся числа, как целые, так и дробные). Подскажи как это можно сделать.
andreiru
В файле просто числа записаны через запятую 1,2,3… ?
Elena
нет, через пробел, примерно в таком виде

6.7 8.9 9
1.3 2.3 6.9
1 3 4
FishHook
>>> s='1 2 3.6 7.9 90'
>>> s.split(' ')
['1', '2', '3.6', '7.9', '90']
>>> 
andreiru
Можно так попробовать:

f = open("myfile.txt", 'r')
data = f.read()
f.close()
res = []
for n in data.split():
    try:
        n = int(n)
    except ValueError:
        n = float(n)
    res.append(n)
print res
fata1ex
>>> s = '1 2 3.6 7.9 90'
>>> map(float, s.split())
[1.0, 2.0, 3.6, 7.9, 90.0]
:)

>>> from itertools import chain
>>> with open('filename.txt', 'r') as f:
...     map(float, chain.from_iterable(map(lambda s: s.split(), f.read().splitlines())))
...     
[1.0, 2.0, 3.6, 7.9, 90.0, 1.0, 2.0, 3.6, 7.8, 90.0, 1.0, 2.0, 3.6, 7.7, 90.0]
Elena
f = open("myfile.txt", 'r')
data = f.read()
f.close()
res = []
for n in data.split():
    try:
        n = int(n)
    except ValueError:
        n = float(n)
    res.append(n)
print res

мне подходит, спасибо, но не совсем. Здесь все считывается в массив в строку. А чтобы сделать так как в самом файле, чтобы массив создавался по строчно. При добавлении дополнительного for он все ровно считывает все в одну строку. Я попыталась использовать вот этот код

filename = ur"1.txt" # открываем файл
a = [] # создаем пустой массив
for line in open(filename).read().split("\n"): # читаем из файла двнные и разбираем по строкам
    for x in line[1:len(line)-1].split(" "): # каждую строку еще раз разбиваем по строкам
        a.append(map(lambda x: int(x), x.split(' '))) # добавляем элемент в массив
print a # выводим весть массив

Но он мне вот что выдает и тоже все в строчку:
[[], [2], [], [], [5], [], [], [6], [], [], [6], [], [], [9], []]
'import sitecustomize' failed; use -v for traceback
fata1ex
>>> with open('filename.txt', 'r') as f:
...     map(lambda s: map(float, s.split()), f.read().splitlines())
...     
[[1.0, 2.0, 3.6, 7.9, 90.0], [1.0, 2.0, 3.6, 7.8, 90.0], [1.0, 2.0, 3.6, 7.7, 90.0]]

Циклы for устарели :)

Вариантов миллион.
>>> numbers = []
>>> with open('filename.txt', 'r') as f:
...     for line in f:
...         current = []
...         for num in line.split():
...             current.append(float(num))
...         numbers.append(current)
...         
>>> numbers
[[1.0, 2.0, 3.6, 7.9, 90.0], [1.0, 2.0, 3.6, 7.8, 90.0], [1.0, 2.0, 3.6, 7.7, 90.0]]

>>> numbers = []
>>> with open('filename.txt', 'r') as f:
...     for line in f:
...         numbers.append([float(num) for num in line.split()])
...     
>>> numbers
[[1.0, 2.0, 3.6, 7.9, 90.0], [1.0, 2.0, 3.6, 7.8, 90.0], [1.0, 2.0, 3.6, 7.7, 90.0]]

>>> numbers = []
>>> with open('filename.txt', 'r') as f:
...     for line in f:
...         numbers.append(map(float, line.split()))
...     
>>> numbers
[[1.0, 2.0, 3.6, 7.9, 90.0], [1.0, 2.0, 3.6, 7.8, 90.0], [1.0, 2.0, 3.6, 7.7, 90.0]]
FishHook
кхм…

Допустим, есть такой файл
1 2 3 4.8 9.2 3.5 5.4 4.4 6.7
1 2 3
8.9 9.1 3 4.7 8.8
Что должно быть на выходе?
Elena
Допустим, есть такой файл
1 2 3 4.8 9.2 3.5 5.4 4.4 6.7
1 2 3
8.9 9.1 3 4.7 8.8
В данном примере строки не равной длины. Лучший пример типа этого:
1 2.3 4
5.8 0 6
4 6 7.8
значит на выходе получаем матрицу
1 2.3 4
5.8 0 6
4 6 7.8
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