Python:使用换行符追加列表

3
在下面的代码中,我通过从for循环内部附加到列表来更新两个项目的列表。我需要在每个字符串附加后添加换行符,但我似乎无法做到。
我认为应该是:
lines = []
for i in range(10):

    line = ser.readline()
    if line:
        lines.append(line + '\n')             #'\n' newline 
        lines.append(datetime.now())

但是这仅仅将 '\n' 添加为字符串。我也尝试了不用引号的方式,但仍然失败。
我得到的结果是:
['leftRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;      0.00;  0.00;\n', datetime.datetime(2016, 8, 25, 23, 48, 4, 517000), '\r\x00rightRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;\n', datetime.datetime(2016, 8, 25, 23, 48, 4, 519000), '\r\x00leftRaw; 928091;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00)]

但是我想要这个:

['leftRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;\n', 
datetime.datetime(2016, 8, 25, 23, 48, 4, 517000), 
'\r\x00rightRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;\n', 
datetime.datetime(2016, 8, 25, 23, 48, 4, 519000)]

有什么想法吗?

为什么被标记为 [tag:b] 呢? :P - gsamaras
当您尝试第二个代码片段时发生了什么? - Ry-
我不小心发送了一半的问题,现在已经完成了。对此我深表歉意。 - Steve
@Steve 好的。我想我曾经有过和你一样的问题,但是我似乎找不到它了,这意味着我在胡说八道,因此没有发帖。你确切想要做什么?我的意思是,当然它会将其添加到字符串中。如果你想的话,你可以始终附加一个新的列表项,它将成为一个换行符。 - gsamaras
更新了我的帖子以包括结果和预期结果。 - Steve
显示剩余2条评论
3个回答

4

我通过使用strftime方法,在每个帧上将datetime.now作为字符串附加到列表中,从而解决了这个问题。然后我可以使用lines = '\n'.join(lines)添加新行。请查看以下代码以获取工作代码。

lines = []
for frame in range(frames):
    line = ser.readline()
    if line:
        lines.append(line)
        lines.append(datetime.now().strftime('%H:%M:%S'))

lines = '\n'.join(lines)

dataFile.write('%s'%(lines))

这将使每个列表项的所需输出显示在新行中,例如:
['leftRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;\n', 
datetime.datetime(2016, 8, 25, 23, 48, 4, 517000), 
'\r\x00rightRaw; 928090;   0;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;  0.00;\n', 
datetime.datetime(2016, 8, 25, 23, 48, 4, 519000)']

1
你可以将所有项目添加到列表中,然后使用.join()函数在列表中每个项目之间添加新行:
for i in range(10):
    line = ser.readline()
    if line:
        lines.append(line)
        lines.append(datetime.now())
final_string = '\n'.join(lines)

我担心楼主并没有要求那个... :/ - gsamaras
这与 OP 所需的代码不匹配,因为这也会在日期时间后添加一个换行符。 - Karin
谢谢,每次添加后都会有一个换行符,而不仅仅是一个。使用您的方法,我遇到了这个错误:TypeError: sequence item 1: expected string, datetime.datetime found。尝试将datetime转换为str但失败了。 - Steve

0

看起来 lines 列表只是被完整地打印出来了。你看到的 \n 只是作为指示器打印出来,表示实际上有新行。看看这个更小的例子:

In [18]: print ['asdf' + '\n\n'] + [datetime.now()],
['asdf\n\n', datetime.datetime(2016, 8, 25, 15, 32, 5, 955895)]
In [19]: a = ['asdf' + '\n\n', datetime.now()]
In [20]: print a[0]
asdf

In [21]: print a
['asdf\n\n', datetime.datetime(2016, 8, 25, 15, 37, 14, 330440)]

In [22]:

我了解。看起来我无法将datetime.datetime转换为字符串。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接