将字符串分隔成新行python 3

时间:2018-02-22 15:02:12

标签: python string python-3.x csv row

我正在努力解决这个问题,所以我写的每一段代码都在一个单独的行上,但是一旦编写了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

这是一条直线,我希望它在每个数据的单独行中。

2 个答案:

答案 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)