[英]Reading .obj file and split lines
我編寫了一個簡單的代碼來讀取看起來像這樣的.obj文件
g cube
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 0.0
v 0.0 1.0 1.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
f 1//2 7//2 5//2
f 1//2 3//2 7//2
f 1//6 4//6 3//6
f 1//6 2//6 4//6
f 3//3 8//3 7//3
f 3//3 4//3 8//3
f 5//5 7//5 8//5
f 5//5 8//5 6//5
f 1//4 5//4 6//4
f 1//4 6//4 2//4
f 2//1 6//1 8//1
f 2//1 8//1 4//1
python代碼看起來像這樣
class objeto():
def __init__(self, obj = None):
if obj:
self.cargar_obj(obj)
def cargar_obj(self, archivo):
with open(archivo, 'r') as obj:
datos = obj.read()
lineas = datos.splitlines()
self.vertices = []
self.superficies = []
for linea in lineas:
elem = linea.split()
if elem:
if elem[0] == 'v':
v = vertice(float(elem[1]), float(elem[2]), float(elem[3]))
self.vertices.append(v)
elif elem[0] == 'f':
vs = []
for i in range(1, len(elem)):
vs.append(self.vertices[int(elem[i].split('/'))])
f = cara(vs)
self.superficies.append(f)
else:
pass
問題似乎是此行:
vs.append(self.vertices[int(elem[i].split('/'))])
因為當我嘗試運行代碼時,出現以下TypeError
int() argument must be a string, a bytes-like object or a number, not 'list'
我是Python的新手,因此似乎無法解決此錯誤,有人可以給我一些建議嗎? 謝謝。
我正在使用Python 3.x和ipython運行.py文件
用一行重新創建您的案例:
In [435]: line='f 1//2 7//2 5//2'
In [436]: elem = line.split()
In [437]: elem
Out[437]: ['f', '1//2', '7//2', '5//2']
In [438]: elem[0]
Out[438]: 'f'
分割/
行為符合我的預期:
In [439]: for i in range(1,len(elem)):
...: print(elem[i].split('/'))
...:
['1', '', '2']
['7', '', '2']
['5', '', '2']
您的代碼在將int
應用於該字符串列表時遇到問題:
In [440]: for i in range(1,len(elem)):
...: print(int(elem[i].split('/')))
...
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
因此,我們需要將int()
應用於單個字符串,而不是列表。 但是現在空字符串給我帶來了問題。
In [441]: for i in range(1,len(elem)):
...: print([int(e) for e in elem[i].split('/')])
...:
ValueError: invalid literal for int() with base 10: ''
剩下的作為練習留給讀者。
無法抗拒:
[int(e) for e in elem[i].replace('//','/').split('/')]
[int(e) for e in elem[i].split('/') if e]
錯誤消息非常清楚:您正在向int
傳遞一個列表(調用split
的結果); 也許您只是想用該列表的元素之一來調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.