动态输出CSV文件

时间:2018-12-14 20:33:45

标签: python pandas dataframe

我已经使用“ Spyder” Python IDE创建了一个SQLite数据库。该数据库包含一个名为“ Engine_Data”的表。

每个星期,我必须通过变量“ Engine Code”解析“ Engine_Data”中的数据,并将结果输出到CSV。不幸的是,由于存在15种不同类型的引擎代码,因此我不得不手动编写15个单独的SQL查询以便生成15个单独的CSV文件:

这是我的疑问:

q1 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'A';", conn)

q1.to_csv(Engine_Code_A_Path, index=False)

第二个查询:

q2 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'B';", conn)

q2.to_csv(Engine_Code_B_Path, index=False)

依次类推,直到引擎代码O!

当然,这种方法太累了,所以我一直在尝试使用所有引擎代码的数组和for循环动态生成15个CSV文件:

Engine_Code_Array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']

for i in Engine_Code_Array:
    q = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = array[i];", conn)
    q.to_csv(Path, index = True)

不用说,我没有运气。关于如何使这个过程完全动态的任何潜在见解?

2 个答案:

答案 0 :(得分:2)

参数应在法定人数之外

"Select * from Engine_Data WHERE Engine_Data.[Engine Code] = %s",(Engine_Code_Array[i])

答案 1 :(得分:1)

我认为@mad_基本上是正确的想法,但建议按照以下方式实施它:

import os

def generate_engine_code_CSV_files(dest_path, engine_codes):
    """ Generate separate CSV file for each engine code.
    """
    for engine_code in engine_codes:
        query = (
            "Select * from Engine_Data "
                "WHERE Engine_Data.[Engine Code] = '{}';".format(engine_code))

        query = pd.read_sql_query(query)
        report_path = os.path.join(
            dest_path, 'Engine Code {} Report.csv'.format(engine_code))
        query.to_csv(report_path, index=True)

report_folder_path = "path/to/reports/folder"
generate_engine_code_CSV_files(report_folder_path, 'ABCDEFGHIJKLMNO')