如何解析/格式化一串元组?

时间:2013-04-11 21:24:23

标签: python string list csv format

我jus写了一个成绩计算程序,并且归结为最后几行...我有这一串元组:

"('Jetson Elroy', '45', '88', '88', '70', 0.7253846153846155, 'C', 'Not Passible', 0.9385714285714284, 0.6528571428571427, 0.367142857142857), ('Joe Kunzler', '99', '88', '77', '55', 0.7699999999999999, 'C', 'Not Passible', 0.8557142857142858, 0.5700000000000001, 0.28428571428571436), ('Harris Jones', '77', '99', '47', '77', 0.7115384615384616, 'C', 'Not Passible', 0.9642857142857143, 0.6785714285714286, 0.39285714285714285)"

我想这样做,以便每个学生和他们的分数逐行打印到我的文本文件中,如:

'Jetson', '45', '88', '88', '70', 0.7253846153846155, 'C', 'Not Passible', 0.9385714285714284, 0.6528571428571427, 0.367142857142857

'Joe', '99', '88', '77', '55', 0.7699999999999999, 'C', 'Not Passible', 0.8557142857142858, 0.5700000000000001, 0.28428571428571436

'Harris Jones', '77', '99', '47', '77', 0.7115384615384616, 'C', 'Not Passible', 0.9642857142857143, 0.6785714285714286, 0.39285714285714285

我试着这样做:

m=open('GradeAnalysis.txt', 'r+')
m.write (print i for i in ourlist)
m.close()

但是我知道如果你想使用m.write(),你必须有一个字符串。然后我将我的列表转移到上面的元组字符串中。任何pythonic建议都表示赞赏。

2 个答案:

答案 0 :(得分:3)

join()可以是一个简单的解决方案:

m.write('\n'.join(i for i in ourstring))

编辑:由于ourstring不是字符串列表而是字符串,因此您可以使用正则表达式来获取表示元组的字符串

import re

ourstring = "('Jetson Elroy', '45', '88', '88', '70', 0.7253846153846155, 'C', 'Not Passible', 0.9385714285714284, 0.6528571428571427, 0.367142857142857), ('Joe Kunzler', '99', '88', '77', '55', 0.7699999999999999, 'C', 'Not Passible', 0.8557142857142858, 0.5700000000000001, 0.28428571428571436), ('Harris Jones', '77', '99', '47', '77', 0.7115384615384616, 'C', 'Not Passible', 0.9642857142857143, 0.6785714285714286, 0.39285714285714285)"
tuples = re.findall(r'\((.+?)\)', ourstring) # (.+?) to perform a non-greedy match - important!
m.write ('\n'.join(t for t in tuples))

答案 1 :(得分:1)

使用str.join()csv module来编写数据。

使用','.join(str(i) for i in ourlist)创建一个以逗号分隔的字符串来写入文件,但由于这实际上是CSV数据,因此csv模块可能更适合。

import csv

with open('GradeAnalysis.txt', 'rb') as out:
    writer = csv.writer(out)
    for row in list_of_sequences:
        out.writerow(row)        

其中list_of_sequences是包含其他列表或元组的列表;例如:

list_of_sequences = [(1, 2, 3), ('foo', 'bar', 'baz')]