Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用换行Python打印字符串_Python_Formatting - Fatal编程技术网

使用换行Python打印字符串

使用换行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

使用上面的脚本,我读入了一个.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.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)