Найти - Пользователи
Полная версия: прочитать из текстового файла
Начало » Python для новичков » прочитать из текстового файла
1
math.beginer
Помогите прочитать файл, строки которого содержат числа , пустые строки и комментарии. два числа в одной строке — это координаты. Нужно получить вектор (список) отрезков, отрезок определяется вектором (точкой) , т.е. двумя координатами.


Формат текстового такой:
# пример файла с данными

#любой отрезок состоит из двух векторов (точек)
# первый отрезок
#начало первого отрезка
1.1 0.1
#конец первого отрезка
1.2 0.1


#второй отрезок

1.2 0.1
1.3 0.2

# третий отрезок
1.2 0.2
1.4 0.4
Должна получиться такая структура:
b1=array([[[1.1,0.1],[1.2,0.1]],[[1.2,0.1],[1.3,0.2]],[[1.2,0.2],[1.4,0.4]]]);

print b1
[[[ 1.1 0.1]
[ 1.2 0.1]]

[[ 1.2 0.1]
[ 1.3 0.2]]

[[ 1.2 0.2]
[ 1.4 0.4]]]
P.S. для численных расчетов что выгоднее numpy или scipy массив (или список не знаю как правильнее)?
Vader
import re
import decimal
s = '''# пример файла с данными

#любой отрезок состоит из двух векторов (точек)
# первый отрезок
#начало первого отрезка
1.1 0.1
#конец первого отрезка
1.2 0.1


#второй отрезок

1.2 0.1
1.3 0.2

# третий отрезок
1.2 0.2
1.4 0.4'''
nums = re.findall('\d\.\d', s)
nums = map(lambda x: decimal.Decimal(x), nums)
print map(lambda x1,y1,x2,y2:[[x1,y1],[x2,y2]],nums[::4],nums[1::4],nums[2::4],nums[3::4])
math.beginer
Спасибо! А не подскажите как перейти к числам?

$ cat 1.dat 
# myfile
1.11 1.
.32 1.13

1.33 1.11
1.51 1.61

1.51 1.62
2.12 2.72

$ cat 2.py
#!/usr/bin/python
import decimal
import re
file = open("1.dat", "r")
s=file.read()
#print s
nums=re.findall('\d*\.\d*',s);
#print nums
#nums = map(lambda x: x, nums)
nums = map(lambda x: decimal.Decimal(x), nums)
#print nums
b1=map(lambda x1,y1,x2,y2:[[x1,y1],[x2,y2]],nums[::4],nums[1::4],nums[2::4],nums[3::4])
print b1
b1[0][1]*b1[0][0]

$ ./2.py
[[[Decimal('1.11'), Decimal('1')], [Decimal('0.32'), Decimal('1.13')]], [[Decimal('1.33'), Decimal('1.11')], [Decimal('1.51'), Decimal('1.61')]], [[Decimal('1.51'), Decimal('1.62')], [Decimal('2.12'), Decimal('2.72')]]]
Traceback (most recent call last):
File "./2.py", line 14, in <module>
b1[0][1]*b1[0][0]
TypeError: can't multiply sequence by non-int of type 'list'
math.beginer
сообразил :-)

b1=array(map(lambda x1,y1,x2,y2:[[x1,y1],[x2,y2]],nums[::4],nums[1::4],nums[2::4],nums[3::4]))
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