Python 我如何打开一个文件并遍历它,只从某些行添加数据?
我有以下代码Python 我如何打开一个文件并遍历它,只从某些行添加数据?,python,parsing,file-io,Python,Parsing,File Io,我有以下代码 my_file=open("test.stl","r+") vertices=[] for line in my_file: line=line.strip() line=line.split() if line.startswith('vertex'): vertices.append([[line[1],line[2],line[3]]) print vertices my_file.close() 现在它给出了这个错误: F
my_file=open("test.stl","r+")
vertices=[]
for line in my_file:
line=line.strip()
line=line.split()
if line.startswith('vertex'):
vertices.append([[line[1],line[2],line[3]])
print vertices
my_file.close()
现在它给出了这个错误:
File "convert.py", line 10
vertices.append([[line[1],line[2],line[3]])
^
SyntaxError: invalid syntax
我的文件中有一堆行,其中许多行的格式为vertex 5.6354345 3.34344 7.345345,例如(stl文件)。我想将这三个数字添加到我的数组中,这样我的数组最终将有[[v1,v2,v3],[v1,v2,v3],…],其中所有的v都来自行。在阅读其他类似问题时,我可能需要导入sys,但我不确定原因。尝试使用:
用于my_文件中的行。readlines():
readlines返回文件中所有行的列表
您不需要在本例中导入sys。请尝试使用:
用于my_文件中的行。readlines():
readlines返回文件中所有行的列表
您不需要在本例中导入sys。STL文件中的行是否有任何前导空格 如果他们这样做了,你需要先把它剥掉
line = line.strip()
另外:调用line.split()
不会影响行。它会生成一个新列表,您需要给新列表起一个名称,然后使用它,如下所示:
fields = line.split()
vertices.append([fields[1], fields[2], fields[3]])
STL文件中的行是否有任何前导空格 如果他们这样做了,你需要先把它剥掉
line = line.strip()
另外:调用line.split()
不会影响行。它会生成一个新列表,您需要给新列表起一个名称,然后使用它,如下所示:
fields = line.split()
vertices.append([fields[1], fields[2], fields[3]])
您没有将line.strip指定给变量,例如:
line_split = line.split()
vertices.append([[line_split[1],line_split[2],line_split[3]])
另一种方法是:
for line in my_file:
line_split = line.split()
if line_split[0] == 'vertex':
vertices.append([[line_split[1],line_split[2],line_split[3]])
您没有将line.strip指定给变量,例如:
line_split = line.split()
vertices.append([[line_split[1],line_split[2],line_split[3]])
另一种方法是:
for line in my_file:
line_split = line.split()
if line_split[0] == 'vertex':
vertices.append([[line_split[1],line_split[2],line_split[3]])
list.split()
不修改列表;它产生了一个全新的列表
将line.split()
的结果分配给line:line=line.split()
然后继续正常操作
但这并不能解决问题,因为您仍然应该从行
(而不是空格)中提取单个字符,因为字符串作为字符列表开始(见下文)
我怀疑Python永远不会超过if line.startswith('vertex'):
条件。因此,正如其他人所说,核心问题可能涉及引导空间或文件本身
此外,如果您只读取文件,则不需要包括访问模式“r+”my_file=open(“test.stl”)
同样有效,而且更具Python风格。list.split()
不会修改列表;它产生了一个全新的列表
将line.split()
的结果分配给line:line=line.split()
然后继续正常操作
但这并不能解决问题,因为您仍然应该从行
(而不是空格)中提取单个字符,因为字符串作为字符列表开始(见下文)
我怀疑Python永远不会超过if line.startswith('vertex'):
条件。因此,正如其他人所说,核心问题可能涉及引导空间或文件本身
此外,如果您只读取文件,则不需要包括访问模式“r+”
my_file=open(“test.stl”)
同样有效,而且更具Python风格。除了其他人提到的以外:
vertices.append([[line[1],line[2],line[3]])
第[1]行前的左括号过多应为:
vertices.append([line[1],line[2],line[3]])
print verticies
您的列表命名为顶点,而不是垂直面。除了其他人提到的以外:
vertices.append([[line[1],line[2],line[3]])
vertices.append([[line[1],line[2],line[3]])
^
SyntaxError: invalid syntax
第[1]行前的左括号过多应为:
vertices.append([line[1],line[2],line[3]])
print verticies
您的列表命名为顶点,而不是垂直
vertices.append([[line[1],line[2],line[3]])
^
SyntaxError: invalid syntax
删除第一个[
(否则缺少]
)以修复语法错误。代码中还有其他错误
要分析具有以下属性的行:
vertex 5.6354345 3.34344 7.345345
将格式设置为具有浮动坐标的三维点列表:
with open("test.stl") as file:
vertices = [map(float, line.split()[1:4])
for line in file
if line.lstrip().startswith('vertex')]
print vertices
删除第一个[
(否则缺少]
)以修复语法错误。代码中还有其他错误
要分析具有以下属性的行:
vertex 5.6354345 3.34344 7.345345
将格式设置为具有浮动坐标的三维点列表:
with open("test.stl") as file:
vertices = [map(float, line.split()[1:4])
for line in file
if line.lstrip().startswith('vertex')]
print vertices
文件对象是可编辑的,在行上迭代readlines()
只需一次将所有行读取到内存中。对于文件中的行:
对于这种事情应该总是足够的readlines()
是不必要的。顺便说一句,在SO上被纠正有时比被提升更有价值:你学到了新东西!文件对象是可编辑的,在行上迭代readlines()
只需一次将所有行读取到内存中。对于文件中的行:
对于这种事情应该总是足够的readlines()
是不必要的。顺便说一句,在SO上被纠正有时比被提升更有价值:你学到了新东西!这是真的,但没有回答问题。这是真的,但没有回答问题。而且,[字段[1],字段[2],字段[3]]
可以压缩为字段[1:4]
。另外,[字段[1],字段[2],字段[3]
可以压缩为字段[1:4]
。请向我们展示您的实际代码。这不会在任何地方打印[]
;它将在append
行中引发SyntaxError
,当您修复该问题时,它将在打印vertices
时引发名称错误。如果你不发布你的真实代码,我们所能做的就是猜测,直到奶牛回家。我已经用真实代码和真实输出更新了问题。请向我们展示你的真实代码。这不会在任何地方打印[]
;它将在append
行中引发SyntaxError
,当您修复该问题时,它将在打印vertices
时引发名称错误。如果你不发布你的真实代码,我们所能做的就是猜测,直到奶牛回家。我已经用真实代码和真实输出更新了这个问题