我正在努力解决这个问题,所以我写的每一段代码都在一个单独的行上,但是一旦编写了CSV文件就会出现一条很长的行,我试过/ n,/ r / n和.splitlines,但没有一个工作,我有相同的结果
这是代码(没有包含模块)
save_path = 'C:\\Users\danie\Desktop\pro 42 42'
name_of_file = 'csv1.csv'
completename = os.path.join(save_path, name_of_file)
#oldtime = time.time()
def Scheduler():
oldtime = time.time()
while 1:
if time.time() > oldtime + 3600:
Generate()
oldtime = time.time()
time.sleep(5)
def Generate():
cursor, connection = database.connection()
#products['2']
count = 1
with open(completename, 'w') as file:
for tank in data.tankOBJ:
product = cursor.execute("SELECT *\
FROM pro42_product\
WHERE product_id ='%s'\
LIMIT 1" %(tank['product']))
product = cursor.fetchone()
print(product)
file.write(str(count) + ',' + str(tank['id']).zfill(2) + ',' + str(tank['name']) + ',' + str(tank['name']) + ',' + product[1] + ',' + str(tank['innage']/1000) + ',' + '0' + ',' + '#' + ',' + 'Mtr' + ',' + str(tank['temperature']) + ',' + str(tank['water']/1000) + ',' + str(tank['density']/1000) + ',' + tank['lastmeasurand'].upper() + ',' + 'Y,/r/n')
count = count + 1
cursor.close()
connection.close()
return "{'success':True}"
这是最终结果 1,01,31-TK-01A,31-TK-01A,B,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y2,02,31-TK-01B ,31-TK-01B,B,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y3,03,44-TK-01,44-TK-01,B, 0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y4,04,51-TK-01,51-TK-01,A,12.323,0,#,Mtr,19.0 ,0.0,0.821,22-FEB-2018 14:29,Y5,05,51-TK-02,51-TK-02,A,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB- 2018 14:29,Y6,06,51-TK-03,51-TK-03,A,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y7,07, 51-TK-04,51-TK-04,A,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y8,08,51-TK-12,51-TK -12,B,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y9,09,51-TK-13,51-TK-13,B,0.0,0, #,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y10,10,51-TK-19,51-TK-19,B,0.0,0,#,Mtr,0.0,0.0,0.0 ,22-FEB-2018 14:29,Y11,11,51-TK-20,51-TK-20,B,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29 ,Y12,12,51-TK-21,51-TK-21,B,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y13,13,51-TK- 22,51-TK-22,B,0.0,0,#,Mtr,0.0,0.0,0.0,22-FEB-2018 14:29,Y14,14,51-TK-23,51-TK-23,A ,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y15,15,51-TK-24,51-TK-24,A,0.0,0,#,Mtr, 0,0 .0,0.0,01-JAN-1970 12:15,Y16,16,51-TK-25,51-TK-25,A,0.0,0,#,Mtr,0,0.0,0.0,01-JAN- 1970年12月15日,Y17,17,51-TK-30,51-TK-30,B,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y18,18, 51-TK-31,51-TK-31,B,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y19,19,51-TK-32,51-TK -32,B,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y20,20,51-TK-33,51-TK-33,B,0.0,0, #,Mtr,0,0.0,0.0,01-JAN-1970 12:15,Y21,21,51-TK-34,51-TK-34,B,0.0,0,#,Mtr,0,0.0,0.0 ,01-JAN-1970 12:15,Y22,22,51-TK-35,51-TK-35,B,0.0,0,#,Mtr,0,0.0,0.0,01-JAN-1970 12:15 ,Y
这是一条直线,我希望它在每个数据的单独行中。
答案 0 :(得分:1)
非常简短的回答:换行符是"
\ n ", not "
/ n`“。
现在有几个建议
1 /特定于硬编码平台的分隔符击败了os.path.join()
2 /通常使用string formatting而不是字符串连接
3 /但是如果你想生成一个csv,而不是use the csv module
4 /如果你想在for循环中同时使用索引和值,不要手动维护索引,use enumerate()
instead
5 /除非你不介意opening your application to SQL injection attacks,否则不要对SQL查询使用字符串插值,use placeholders and prepared statements instead
6 /你的系统肯定有一个内置任务调度程序(上次我使用Windows - 在19年前的NT4天,它有一个,我认为它仍然有),使用它而不是重新发明广场轮。答案 1 :(得分:0)
使用the standard library's csv module(包括plenty of examples来证明其用途)可能会从中受益匪浅。
在上面显示的情况下,不是像你的情况那样逐行编写文件,而是看起来像:
import csv
count = 1
products = []
for tank in data.tankOBJ:
product = cursor.execute(
"SELECT * FROM pro42_product "
"WHERE product_id ='%s' "
"LIMIT 1" % (tank['product']))
product = cursor.fetchone()
newrow = [
count,
str(tank['id']).zfill(2),
tank['name'],
tank['name'],
product[1],
tank['innage']/1000,
'0',
'#',
'Mtr',
tank['temperature'],
tank['water']/1000,
tank['density']/1000,
str(tank['lastmeasurand']).upper(),
'Y'
]
products.append(newrow)
count += 1
with open(completename, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(products)