python
  • string-formatting
  • 2014-10-21 121 views 0 likes 
    0

    我想插入多行SQL文件的Python腳本中的文件內容:Python:如何將文件內容附加到格式字符串?

    sql_file = open(sql_file_path, 'r') 
    file_content = sql_file.read() 
    file_content = file_content.replace("placeholder", "realvalue") 
    
    import_cmd = 'ogr2ogr -f "PostgreSQL" \ 
    -lco GEOMETRY_NAME=the_geom \ 
    PG:"host=localhost user={db_user_name} port=5432 \ 
    dbname={db_name} password={db_password}" \ 
    {source_file} -nln "{db_table_name}" \ 
    -sql "$(cat {file_content})"' 
    
    os.system(import_cmd.format(
        db_user_name=db_user_name, 
        db_name=db_name, 
        db_password=db_password, 
        source_file=source_file, 
        db_table_name=db_table_name, 
        file_content=file_content 
    )) 
    

    文件sql_file_path包含多行。內容通過replace修改。然後,新的file_content必須附加到ogr2ogr命令行工具的-sql參數中。但是,腳本會拋出此錯誤:

    Syntax error: "(" unexpected (expecting ")") 
    
    +0

    你真的想''(貓{file_content})「'而不是'回聲'? – Dinesh 2014-10-21 22:53:07

    回答

    1

    請勿使用os.system。使用subprocess.call()並在您的參數傳遞的列表:

    import subprocess 
    
    conn_info = (
        'PG:host=localhost user={db_user_name} port=5432 ' 
        'dbname={db_name} password={db_password}'.format(
         db_user_name=db_user_name, 
         db_name=db_name, 
         db_password=db_password)) 
    
    subprocess.call([ 
        'ogr2ogr', '-f', 'PostgreSQL', '-lco', 'GEOMETRY_NAME=the_geom', 
        conn_info, source_file, '-nln', db_table_name, '-sql', file_content]) 
    

    這不會通過一個外殼,但直接調用程序,並在直接作爲是傳遞每個參數。不需要進一步引用。

    +0

    當我通過多行'file_content'時,該過程失敗,':文件名太長'。 – JJD 2014-10-22 18:44:58

    +0

    @JJD:你確定參數的順序適用於該工具嗎? [documentation](http://www.gdal.org/ogr2ogr.html)有點神祕,但'-sql'參數必須位於'dst_datasource_name'和'src_datasource_name'參數之前。工作命令行(帶引號)是什麼樣的? – 2014-10-22 19:01:08

    相關問題