Это очень простая проблема, но я делаю это бесполезно сложным и продолжаю ударять по дорожным блокам.Python, отрицательные числа string to float
Я пытаюсь разобрать простой текстовый файл, содержащий информацию облака точек, x, y, z.
Это выглядит следующим образом:
vertices:
v -543.243 -494.262 1282
v -538.79 -494.262 1282
v -536.422 -496.19 1287
v -531.951 -496.19 1287
v -527.481 -496.19 1287
v -213.909 -223.999 581
v -212.255 -224.384 582
v -209.15 -223.228 579
v -207.855 -223.999 581
v -205.482 -223.613 580
v -203.468 -223.613 580
v -201.106 -223.228 579
v -199.439 -223.613 580
v -197.765 -223.999 581
v -195.41 -223.613 580
v -193.062 -223.228 579
v -190.721 -222.842 578
v -189.04 -223.228 579
v -187.998 -224.384 582
v -185.976 -224.384 582
v -183.955 -224.384 582
v -181.621 -223.999 581
v -179.293 -223.613 580
v -177.279 -223.613 580
v -175.264 -223.613 580
v -173.549 -223.999 581
v -171.531 -223.999 581
v -169.513 -223.999 581
v -167.495 -223.999 581
v -165.761 -224.384 582
v -163.74 -224.384 582
v -161.718 -224.384 582
v -159.697 -224.384 582
v -157.946 -224.77 583
v -155.921 -224.77 583
v -153.896 -224.77 583
v -151.871 -224.77 583
v -149.847 -224.77 583
v -147.568 -224.384 582
Право в порядке. Не так плохо.
Следующая Я использую питона в блендере, чтобы преобразовать эти точки в вершинах:
Это выглядит следующим образом: `
#Open the file
try:
f=open(path, 'r')
except:
print ("Path is not Valid")
#Create an array of
verts = []
#verts=[float(e) for e in verts if e]
#values = []
for line in f:
lines = f.readline()
#values = ([c for c in lines if c in '-1234567890.'])
if line.startswith("v "): #Go through file line by line
read = lines.strip(' v\n').split(',') #remove the v,[email protected],
#read = values.split(',')
#loop over all stuff in read, remove non-numerics
for d in read:
d= d.strip('-').split(' ')
print("d:", (d))
for n in d:
n = n.strip('-')
verts = verts.append(float(n[0]))
#verts = verts.append(float(n[2]))
#verts = verts.append(float(n[3]))
print("vertsloops", d[0])
print("read1", read[0])
print(read)
print("oo1verts", verts)
##################
#Extend the array#
#print ("Could not use the line reading: %s"%read)
# Create a new mesh, it is now empty
mesh = bpy.data.meshes.new("Cube")
# Create empty vertices field in the mesh
mesh.vertices.add(len(verts))
# Add vertices
mesh.vertices.foreach_set("co", verts)
#Add a new empty object named "Read the PointCloud Data"
obj = bpy.data.objects.new("Read the PointCloud Data", mesh)
# Link object to current scene
bpy.context.scene.objects.link(obj)
`
Как-то я попробовал много различных комбинаций разделения строки, но все-таки получение ошибок. Я знаю, что это простая задача!?! Любой совет, пожалуйста!
Ошибки я получаю взглянуть на первый, как:
d: ['-536.422', '-496.19', '1287']
Traceback (most recent call last):
File "/Users/.../importpoints.blend/importpoints", line 37, in <module>
ValueError: could not convert string to float: '-'
Error: Python script fail, look in the console for now...
А потом вот так:
d: ['536.422', '-496.19', '1287']
vertsloops 536.422
Traceback (most recent call last):
File "/Users/.../importpoints.blend/importpoints", line 37, in <module>
AttributeError: 'NoneType' object has no attribute 'append'
Error: Python script fail, look in the console for now...
Одна вещь, как же поплавок ('- 531') не будут обрабатываться как отрицательное число. Как бы то ни было, он попадает в «-» sting и считает его нечисловым, поэтому он не может его преобразовать. Но его отрицательный, так как я могу указать, что ???
Спасибо.
Чтобы быть ясным, сначала я не выполнял n.strip ('-'), я попытался пропустить первую ошибку. Но я хотел бы включить отрицательные поплавки ... – umbrellaSriracha
Является ли черта некоторым другим персонажем, чем обычный ASCII минус? – tripleee