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
还有其他办法吗?
答案 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()
:
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
参数设置为''
。这样,模块可以正确控制换行,并支持在列值中包含换行符。