2013-04-11 2 views
1

I 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(). Затем я перечислил свой список в строку кортежей, как у меня выше. Любые пифонические предложения приветствуются.

ответ

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')] 
3

join() может быть простое решение:

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

Edit: Поскольку 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)) 
+0

Это, к сожалению, p rints строка для каждого символа в строке '\ n' j '\ n' e '\ not' \ n – lizG91

Смежные вопросы