使用换行Python打印字符串
使用上面的脚本,我读入了一个.txt文件,并将其重新格式化为“nr”,因此它看起来像这样:使用换行Python打印字符串,python,formatting,Python,Formatting,使用上面的脚本,我读入了一个.txt文件,并将其重新格式化为“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.wri
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文件中,但Python不允许我在每个条目后打印带换行符的“nr”,我想这是因为数据是字符串。我得到这个错误:
['012015072314000000']
['012015072313450000']
['012015072313300000']
['012015072313150000']
['012015072313000000']
['012015072312450000']
['012015072312300000']
['012015072312150000']
还有其他方法吗?无需将字符串放入列表中;只需在此处使用
outfile.write()
,构建一个没有列表的字符串:
TypeError: can only concatenate list (not "str") to list
与其使用7个单独的format()
调用,不如使用str.format()
:
请注意,我用一个格式化操作格式化了datetime
对象,并将换行符包括在字符串格式中
您似乎对s
值进行了硬编码;您也可以直接将其转换为以下格式:
nr = '{:02}{:%Y%m%d%H%M}{:04}\n'.format(s, d, int(p * 0.2))
outfile.write(nr)
将脚本更新为:
nr = '01{:%Y%m%d%H%M}{:04}\n'.format(d, int(p * 0.2))
outfile.write(nr)
考虑到如果您遵循有关打开文件的指导原则,则
csv
模块工作得更好;在Python2中,需要以二进制模式打开文件('rb'
),在Python3中,需要将换行符
参数设置为'
。这样,模块就可以正确地控制换行符,并支持在列值中包含换行符。您试图将列表与字符串组合在一起,这是行不通的。不要在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)
您认为如何将列表连接到字符串?出于兴趣,这是Python 2还是Python 3?您应该真正按照CSV模块指南打开您的文件;在Python2中,这意味着以二进制模式打开,在Python3中,设置
newline=''
。我改为二进制!谢谢,我忘了。我正在使用Python 2。为什么不使用strftime()?Martijn我很抱歉。我以为我选了你的!没问题。再次感谢您的帮助。:-)
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)
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)