1

我只是写了一个成绩计算程序,并且一直到最后几行......我有这个元组字符串:

"('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 建议表示赞赏。

4

2 回答 2

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))
于 2013-04-11T21:27:07.717 回答
1

使用其中一个str.join()csv模块来写入您的数据。

Using','.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')]
于 2013-04-11T21:26:59.463 回答