我如何在python中写一个文件列表

时间:2013-12-27 20:36:14

标签: python sqlite

我是学生学习python,对于我的项目,我正在使用SQLite开发一个库存管理系统。

我有点坚持将“需要订购的库存”保存到文本文件中。 我想我只需要将一个列表保存到.txt文件中,但是我已经玩了几个小时试图弄明白。

SQL statment从数据库中获取数据,这些数据是我要保存到txt文件的内容。

我试图使用pickle.dump然而它与(“\ n”)没有太好用,因为我不会在每一行数据的新行上。

任何帮助都会很可爱......

我的代码如下:

import sqlite3, menus, pickle
def main():
    with sqlite3.connect("mrsimms.db") as db:
        cursor = db.cursor()
        data = int(input("Please enter the max number in stock you wish to disply: "))
        sql = "select * from Stock where NumberInStock between 0 and '{0}'".format(data)
        cursor.execute(sql)
        data = cursor.fetchall()

        print(data[0])
        print()
        print(data[1])
        print()


    print('1. Save order list to a file')
    print('2. Do another order list')
    print('9. Quit')
    choice=int(input('what would you like to do?'))
    if choice ==1:

        pickle.dump(data("\n"), open('orderlist.txt','wb'))
        print('Your list has been saved...')

    elif choice ==2:
        main()
    elif choice ==9:
        menus.menu1()  
main()

3 个答案:

答案 0 :(得分:2)

首先,您必须回答一个重要问题:“我想要的文本文件中的数据格式是什么?”。请注意,sqlite有自己的数据格式,从那个角度来看,你已经将数据放在一个文件中(mrsimms.db)。这更有意义,特别是因为你正在玩pickle,这实际上并不是人类可读的。

一旦你回答它应该是非常直接的。

例如,如果您想以CSV格式保存,那么这样做:

import csv
with open("orderlist.txt", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(data)

如果你想要泡菜:

with open("orderlist.txt", "wb") as f:
     pickle.dump(data, f)

data("\n")没有多大意义。 data是一个列表,因为它是fetchall()的结果。列表在Python中不可调用。

如果你想要每行一个泡菜,那么你可以这样做:

with open("orderlist.txt", "wb") as f:
    for row in data:
        pickle.dumps(row, f)
        f.write(b"\n")

虽然很难看。我不推荐它。

答案 1 :(得分:0)

您可以使用此方法将列表写入文件。

lines = ["line one \n", "line two \n", "line three \n"]
OutFile = open("lines.txt", "w")
OutFile.writelines(lines)
OutFile.close()

答案 2 :(得分:0)

@freakish有一个很好的答案。如果您想要人类可读的东西,您可以使用从select调用中获得的数据将格式化的字符串写入文件。假设您的数据库有一个名为ProductName的列,您可以将结果限制为要显示的数据(并通过迭代光标删除几行代码)并执行:

import sqlite3
def main():
    with sqlite3.connect("mrsimms.db") as db:
        with open('stock.txt', 'w') as fp:
            cursor = db.cursor()
            data = int(input("Please enter the max number in stock you wish to disply: "))
            sql = "select NumberInStock, ProductName from Stock where NumberInStock between 0 and '{0}'".format(data)
            for row in cursor.execute(sql):
                print(row) # should be something like (42, "Pickles")
                fp.write('We only have {0} {1}\n'.format(*row))
main()