2017-03-26 8 views
0

データベースから印刷するときに奇妙なエラーが発生しました。問題がPythonのデコードなどに起因するのかどうかは不明です。私は(「」)sys.stdout.writeを使用しようとした同様の出力問題をmysqlcursorを使用して最初の文字を上書きするPythonの印刷機能

を有し*更新1 PowerShellが同じ出力を有し、windowsizeを変化させることが見出さ全く影響http://imgur.com/a/eWnpP

*アップデート2 解決策がありません:追加フィールド.decode()。ストリップ()の代わりにfield.decode()削除

はあなたが@tdelaneyありがとう '/ R' 文字の

コード

import mysql.connector 
import sys 
import os 
import sys 
from datetime import datetime 

################################# 

# Database settings 

hostname = "localhost" 
username = "root" 
password = "---------" 
database = "weatherdb" 
port = 3306 

# arguments 
csvFile = "" 
tableName ="" 

################################# 

# Simple routine to run a query on a database and print the results: 
def doQuery(conn): 
    cur = conn.cursor() 

    cur.execute("SELECT * FROM weather_record") 
    count = 0 
    for row in cur: 
     res = "" 
     for field in row: 
      res = res + str(field.decode())+ "|" # line in question 
      print(res)    
     res = res + "\n" 

################################# 
# Get user arguments 
def main(argv): 
    if(len(sys.argv)== 3): 
     # correct number of arguments 
     pw = sys.argv[2] 
     csvFile = sys.argv[1] 
     loadToDB() 
    else: 
     # incorrect number of arguments 
     currentFileName = os.path.basename(__file__) 
     print(f"usage {currentFileName} inputfile.csv tableName") 
     sys.exit(2) 


################################# 

print("Using mysql.connector…") 
myConnection = mysql.connector.connect(host=hostname, user=username, port=port, passwd=password, db=database) 
doQuery(myConnection) 
myConnection.close() 

################################# 

# Run main function on script start 
if __name__ == "__main__": 
    main(sys.argv[1:]) 

データベーステーブル

すべてのフィールドそれが違いを行う場合varchar型

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 

 
<html> 
 
    <head> 
 
    <title>weather_record</title> 
 
    <meta name="GENERATOR" content="HeidiSQL 9.4.0.5125"> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
    <style type="text/css"> 
 
     thead tr {background-color: ActiveCaption; color: CaptionText;} 
 
     th, td {vertical-align: top; font-family: "Tahoma", Arial, Helvetica, sans-serif; font-size: 10pt; padding: 3px; } 
 
     table, td {border: 1px solid silver;} 
 
     table {border-collapse: collapse;} 
 
     thead .col0 {width: 101px;} 
 
     thead .col1 {width: 82px;} 
 
     thead .col2 {width: 85px;} 
 
     thead .col3 {width: 67px;} 
 
     thead .col4 {width: 85px;} 
 
     thead .col5 {width: 78px;} 
 
     thead .col6 {width: 122px;} 
 
     thead .col7 {width: 142px;} 
 
     thead .col8 {width: 135px;} 
 
     thead .col9 {width: 86px;} 
 
     thead .col10 {width: 102px;} 
 
     thead .col11 {width: 118px;} 
 
     thead .col12 {width: 98px;} 
 
     thead .col13 {width: 118px;} 
 
     thead .col14 {width: 119px;} 
 
     thead .col15 {width: 86px;} 
 
     thead .col16 {width: 102px;} 
 
     thead .col17 {width: 118px;} 
 
     thead .col18 {width: 98px;} 
 
     thead .col19 {width: 118px;} 
 
     thead .col20 {width: 119px;} 
 
    </style> 
 
    </head> 
 

 
    <body> 
 

 
    <table caption="weather_record (27 rows)"> 
 
     <thead> 
 
     <tr> 
 
      <th class="col0">date</th> 
 
      <th class="col1">minTemp</th> 
 
      <th class="col2">maxTemp</th> 
 
      <th class="col3">rainfall</th> 
 
      <th class="col4">evaporation</th> 
 
      <th class="col5">sunshine</th> 
 
      <th class="col6">maxWindGustDir</th> 
 
      <th class="col7">maxWindGustSpeed</th> 
 
      <th class="col8">maxWindGustTime</th> 
 
      <th class="col9">9amTemp</th> 
 
      <th class="col10">9amHumidity</th> 
 
      <th class="col11">9amCloudCover</th> 
 
      <th class="col12">9amWindDir</th> 
 
      <th class="col13">9amWindSpeed</th> 
 
      <th class="col14">9amAirPressure</th> 
 
      <th class="col15">3pmTemp</th> 
 
      <th class="col16">3pmHumidity</th> 
 
      <th class="col17">3pmCloudCover</th> 
 
      <th class="col18">3pmWindDir</th> 
 
      <th class="col19">3pmWindSpeed</th> 
 
      <th class="col20">3pmAirPressure</th> 
 
     </tr> 
 
     </thead> 
 
     <tbody> 
 

 
<td> 
 
     </tr> 
 
     <tr> 
 
      <td class="col0">2017-02-28</td> 
 
      <td class="col1">10.9</td> 
 
      <td class="col2">33.3</td> 
 
      <td class="col3">0</td> 
 
      <td class="col4"></td> 
 
      <td class="col5"></td> 
 
      <td class="col6">N</td> 
 
      <td class="col7">30</td> 
 
      <td class="col8">09:24</td> 
 
      <td class="col9">21.2</td> 
 
      <td class="col10">66</td> 
 
      <td class="col11"></td> 
 
      <td class="col12">SE</td> 
 
      <td class="col13">7</td> 
 
      <td class="col14">1022.3</td> 
 
      <td class="col15">32.1</td> 
 
      <td class="col16">22</td> 
 
      <td class="col17"></td> 
 
      <td class="col18">NNE</td> 
 
      <td class="col19">9</td> 
 
      <td class="col20">1019.9 
 
</td> 
 
     </tr> 
 
     </tbody> 
 
    </table 
 
    </body> 
 
</html>

出力

は、出力は窓にコマンドラインで示されたされている

C:\Python>python csvToDb.py 
Using mysql.connector… 
2017-02-28| 
2017-02-28|10.9| 
2017-02-28|10.9|33.3| 
2017-02-28|10.9|33.3|0| 
2017-02-28|10.9|33.3|0|| 
2017-02-28|10.9|33.3|0||| 
2017-02-28|10.9|33.3|0|||N| 
2017-02-28|10.9|33.3|0|||N|30| 
2017-02-28|10.9|33.3|0|||N|30|09:24| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66|| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22|| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE| 
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE|9| 
|017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE|9|1019.9 
usage csvToDb.py inputfile.csv tableName 

最後の2行目にあるように、最初の文字は '|'で上書きされています。キャラクター。誰かがこれまでに遭遇したことはありますか?

+0

これはコマンドプロンプトの折り返しではありませんか? PowerShellでスクリプトを実行して、ウィンドウを大きくしてみてください。 – Blender

+0

Powershellの出力は同じです。 http://imgur.com/a/eWnpP – nuzzz

+0

多分そこに\ rのような奇妙な文字があります。デバッグのために、 'repr(field.decode())'に変更してください。余分な引用符はありますが、奇妙な文字が表示されます。 – tdelaney

答えて

0

標準端末の場合\r文字は、挿入ポイントを現在の行の先頭に戻します。あなたのラインの前が上書きされている場合は、有罪の党である可能性があります。

根本原因IMHOは、データがデータベースに格納されたときに正しくスクラブされなかったことです。 DB自体をクリーンアップできない場合は、使用するたびにスクラブを実行するという解決策があります。

関連する問題