通过读取文本文件返回列表

时间:2017-02-10 02:54:37

标签: python

我正在读取一个用空格分隔的文本文件,该文件看起来像:

第一行:你好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

但这不起作用......它说无效的语法....有人可以帮助我吗? 我也试过用这种方法的另一个文件,但它说字符串不能转换成浮点数...我不能让这个工作,我真的会帮助你!谢谢!!!!!!!

5 个答案:

答案 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)

  1. Oracle notationsplit代替' '
  2. ','字符串ast.literal_eval获取列表'[1.2,9.7]'
  3. [1.2,9.7]

答案 2 :(得分:0)

首先,您应该告诉我们invalid syntax在哪一行发生。它可能由 Tab Space 或其他原因引起。

其次,您可以print s[2][0]s[2][1]。 我猜它可能是这样的:

[8.23.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)