我正在读取一个用空格分隔的文本文件,该文件看起来像:
第一行:你好2928977 [1.2,9.7]
第二行:苹果6723547 [8.2,3.1]
....
我想返回一个像[(hello,1.2,9.7),(apple,8.2,3.1),...]这样的列表 我该怎么做呢? 我知道第一步是设置一个空列表,然后执行
output =[]
inputfile = open('text.txt','r')
for eachline in inputfile:
l=line.strip()
s=l.split(',')
output.append((s[0],float(s[2][0]),float(s[2][1]))
return output
但这不起作用......它说无效的语法....有人可以帮助我吗? 我也试过用这种方法的另一个文件,但它说字符串不能转换成浮点数...我不能让这个工作,我真的会帮助你!谢谢!!!!!!!
答案 0 :(得分:1)
狭义地解决无效语法,计算括号,同时打开:
output.append((s[0],float(s[2][0]),float(s[2][1]))
^^ ^ ^
并关闭:
output.append((s[0],float(s[2][0]),float(s[2][1]))
^ ^^
看到问题?如果你看到SyntaxError
在一条没有意义的行上,请查找从前一行开始的不匹配的parens,括号等;错误通常会发生,因为不匹配后的下一行被解释为前一行的一部分,当然它在语法上不合法。
答案 1 :(得分:0)
Oracle notation
由split
代替' '
','
字符串ast.literal_eval
获取列表'[1.2,9.7]'
[1.2,9.7]
答案 2 :(得分:0)
首先,您应该告诉我们invalid syntax
在哪一行发生。它可能由 Tab 或 Space 或其他原因引起。
其次,您可以print
s[2][0]
和s[2][1]
。
我猜它可能是这样的:
[8.2
和3.1]
,因此无法转换为浮动。
您可以像这样修改它:
output.append((s[0],float(s[2][0][1:]),float(s[2][1][:-1]))
答案 3 :(得分:-1)
看起来你正试图在列表中添加元组。
output_list = []
with open('answer.txt', 'r') as f:
data = f.read().rstrip('\n')
for line in data.split('\n'):
line_updated = line.strip("[").strip(']').split(' ')
required_elements = line_updated[0], line_updated[2]
output_list.append(required_elements)
print('\n',output_list)
[('hello', '1.2,9.7'), ('apple', '8.2,3.1')]
答案 4 :(得分:-1)
我通常会使用正则表达式进行此类模式匹配,以确保[..]
中的元素是数字。
但要继续你正在做的事情:
#s='hello 2928977 [1.2,9.7]\napple 6723547 [8.2,3.1]\n'
#sp=s.splitlines()
with open(filename, "rb") as f:
sp=f.readlines()
output=[]
for p in sp:
words = p.split(" ")
x,y=[float(x) for x in words[2].strip("[|]").split(",")]
output.append((words[0], x,y ) )
print(output)