Форум сайта python.su
Помогите прочитать файл, строки которого содержат числа , пустые строки и комментарии. два числа в одной строке — это координаты. Нужно получить вектор (список) отрезков, отрезок определяется вектором (точкой) , т.е. двумя координатами.
Формат текстового такой:
# пример файла с данными
#любой отрезок состоит из двух векторов (точек)
# первый отрезок
#начало первого отрезка
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]]]
Офлайн
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])
Отредактировано (Апрель 27, 2011 01:51:00)
Офлайн
Спасибо! А не подскажите как перейти к числам?
$ 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'
Офлайн
сообразил :-)
b1=array(map(lambda x1,y1,x2,y2:[[x1,y1],[x2,y2]],nums[::4],nums[1::4],nums[2::4],nums[3::4]))
Офлайн