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
时引发
名称错误。如果你不发布你的真实代码,我们所能做的就是猜测,直到奶牛回家。我已经用真实代码和真实输出更新了这个问题