从数据库打印时遇到一个奇怪的错误,不确定问题是由python解码引起的还是其他问题。我尝试使用sys.stdout.write('。'),它有类似的输出问题
*更新1 Powershell具有相同的输出,并且不同的窗口大小无效http://imgur.com/a/eWnpP
*更新2 找到的解决方案:添加field.decode()。strip()而不是field.decode()删除'/ r'字符
谢谢@tdelaney
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>
如果产生差异
,则输出显示在Windows 的命令行中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
正如您在第二行中看到的那样,第一个字符已被“|”覆盖字符。有没有人遇到过这个?
答案 0 :(得分:0)
在标准终端中\r
字符将插入点移回当前行的开头。如果你的队伍正面被覆盖,很有可能是有罪的一方。
根本原因恕我直言,数据在放入数据库时未被正确清理。如果您无法清理数据库本身,解决方案是每次使用时都要进行清理。