2016-12-07 26 views
-2

通常のエンドユーザのために、読みやすいレポート(csvではなく)としてsqliteクエリをテキストファイルに書き込もうとしています。ファイルに書き込むことはできますが、レポート内に改行を入れることはできません。テキストファイルは次のようになりますPython sqliteの改行でファイルを書き込む

[(6, 'Pass', 'Data', 60), (7, 'name7', 'name7', 75), (8, 'name8', 'name8', 99), (9, 'name9', 'name9', 15)] 

ここに私の機能です:

def reportAll(): 
cursor = conn.execute("SELECT * FROM STUDENTS") #this line might not be needed 
output = cursor.fetchall() 
reportFile = open("All Students.txt", "w", newline='\n') 
reportFile.write(str(output)) 
reportFile.close() 
print("Report saved into 'All Students.txt'") 
print("**********") 

私は運と、様々な場所に "\ nを" にハッキングしようとしたんです。何か案は?通常のエンドユーザーのための読みやすいレポートの場合

+0

':reportFile.write(STRを(ライン)) '?! – jonrsharpe

+0

動作しませんでした。これで角括弧が削除されました。 – wewtwewt

+0

それから 'str(line)+ '\ n"です。要点は、リストを反復して各項目を別々に書く必要があるということです。 – jonrsharpe

答えて

0

、私は次の例のように、prettytableを使用する場合があります。

import sqlite3 
import prettytable 

def reportAll(conn): 
    cursor = conn.execute("SELECT * FROM STUDENTS") 
    output = prettytable.from_db_cursor(cursor) 
    output.set_style(prettytable.PLAIN_COLUMNS) 
    output.align = "l" 
    with open("All Students.txt", "w") as reportFile: 
     reportFile.write(output.get_string()) 
    print("Report saved into 'All Students.txt'") 
    print("**********") 

def setup(conn): 
    data = [(6, 'Pass', 'Data', 60), 
      (7, 'name7', 'name7', 75), 
      (8, 'name8', 'name8', 99), 
      (9, 'name9', 'name9', 15)] 
    conn.execute(
     '''create table STUDENTS (
       ID integer, 
       FIRSTNAME text, 
       LASTNAME text, 
       SCORE integer);''') 
    conn.executemany('insert into STUDENTS values (?, ?, ?, ?);', data) 
    conn.commit() 


def main(): 
    conn = sqlite3.connect(":memory:") 
    setup(conn) 
    reportAll(conn) 

main() 

結果:出力の行の

ID  FIRSTNAME  LASTNAME  SCORE 
6   Pass    Data   60 
7   name7   name7   75 
8   name8   name8   99 
9   name9   name9   15  
関連する問題