使用换行符Python打印字符串

时间:2015-07-29 16:56:23

标签: python formatting

import csv
import datetime
with open('soundTransit1_remote_rawMeasurements_15m.txt','r') as infile, open('soundTransit1.txt','w') as outfile:
    inr = csv.reader(infile,delimiter='\t')
    #ouw = csv.writer(outfile,delimiter=' ')
    for row in inr:
        d = datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S')
        s = 1
        p = int(row[5])
        nr = [format(s,'02')+format(d.year,'04')+format(d.month,'02')+format(d.day,'02')+format(d.hour,'02')+format(d.minute,'02')+format(int(p*0.2),'04')]
        outfile.writelines(nr+'/n')

使用上面的脚本,我读了一个.txt文件并将其重新格式化为' nr'所以它看起来像这样:

['012015072314000000']
['012015072313450000']
['012015072313300000']
['012015072313150000']
['012015072313000000']
['012015072312450000']
['012015072312300000']
['012015072312150000']

...等。

我现在需要将它打印到我的新.txt文件中,但Python不允许我打印' nr'每次输入后都有换行符,我认为因为数据是字符串。我收到这个错误:

TypeError: can only concatenate list (not "str") to list

还有其他办法吗?

2 个答案:

答案 0 :(得分:2)

您正在尝试将列表与字符串组合在一起,但这不起作用。只是不要在nr中创建列表。

import csv
import datetime
with open('soundTransit1_remote_rawMeasurements_15m.txt','r') as infile, open('soundTransit1.txt','w') as outfile:
    inr = csv.reader(infile,delimiter='\t')
    #ouw = csv.writer(outfile,delimiter=' ')
    for row in inr:
        d = datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S')
        s = 1
        p = int(row[5])
        nr = "{:02d}{:%Y%m%d%H%M}{:04d}\n".format(s,d,int(p*0.2))
        outfile.write(nr)

答案 1 :(得分:1)

无需将字符串放入列表中;只需在这里使用outfile.write()并构建一个没有列表的字符串:

nr = format(s,'02') + format(d.year,'04') + format(d.month, '02') + format(d.day, '02') + format(d.hour, '02') + format(d.minute, '02') + format(int(p*0.2), '04')
outfile.write(nr + '\n')

使用format()

,而不是使用7个单独的str.format()来电
nr = '{:02}{:%Y%m%d%H%M}{:04}\n'.format(s, d, int(p * 0.2))
outfile.write(nr)

请注意,我使用一个格式化操作格式化datetime对象,并将换行符包含在字符串格式中。

您似乎对s值进行了硬编码;你也可以直接把它放到格式中:

nr = '01{:%Y%m%d%H%M}{:04}\n'.format(d, int(p * 0.2))
outfile.write(nr)

将您的脚本更新为:

with open('soundTransit1_remote_rawMeasurements_15m.txt', 'r') as infile,\
        open('soundTransit1.txt','w') as outfile:
    inr = csv.reader(infile, delimiter='\t')
    for row in inr:
        d = datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
        p = int(int(row[5]) * 0.2)
        nr = '01{:%Y%m%d%H%M}{:04}\n'.format(d, p)
        outfile.write(nr)

如果您遵循有关打开文件的指导原则,请考虑csv模块的效果会更好;在Python 2中,您需要以二进制模式('rb')打开文件,在Python 3中,您需要将newline参数设置为''。这样,模块可以正确控制换行,并支持在列值中包含换行符。