在python中格式化/显示列表

时间:2012-10-11 03:10:06

标签: python list string-formatting

我是python中的新手,我有一个正在运行的代码,它从Web服务中提取数据并将其放入列表并将其写入文本文件。当我运行此代码并打开文本文件时,数据是连续的。我需要像文本文件中的每一行一样,它将显示5个元素,并将转到下一行并写下接下来的5个元素,依此类推。希望你可以通过其他方式帮助我解决这个问题或建议。这是代码。

f = open("test.txt", "w")

for item in test:
    f.write("%s    |    " % item)
f.close()

结果如下:

data1, data2, data3, data4, data5, data6, data7, data8......................

应采用以下格式:

data   |   data2   |   data3   |   data4   |
data5  |   data6   |   data7   |   data8   |
data9  |   data10  |   data11  |   data12  |

我希望我可以得到你的意见。谢谢!

4 个答案:

答案 0 :(得分:3)

这些字符不在列表中, 列表。

>>> print ''.join(['foo', 'bar', 'baz'])
foobarbaz

答案 1 :(得分:1)

正如@Ignacio所说,您需要更改列表的打印方式。

for line in list_s:
    # f.write("%s\n" % line) 
    f.write(''.join(line))

如果您想在表格中显示它,可以像这样格式化每一行:

>>> print '{0:10s} {1:10s} {2:10s}'.format('foo', 'bar', 'baz')
foo        bar        baz       

或用行:

>>> print '{0:10s} | {1:10s} | {2:10s}'.format('foo', 'bar', 'baz')
foo        | bar        | baz    

有关详细信息,请参阅Python Input and Output documentation

答案 2 :(得分:1)

for i, item in enumerate(test):
    if i and i % 4 == 0:
        f.write("\n")
    f.write("%-9s|   " % item)

答案 3 :(得分:0)

你叫什么“特殊字符”?您拥有的数据的编码是什么?在继续之前,重要的是你要了解什么是编码,什么是unicode,以及你所得到的数据和数据不仅限于主要用于英语的26个字母。 Check this article了解它。

也就是说,Python可以使用您选择的编码对您的数据进行编码 - 甚至是ASCII,因此您只能获得32-127个字符,而且根本没有“陌生”字符 - 比如ã,ç,É - 或者您可以在utf-8中对您的数据进行编码,以便能够使用我们在地球上使用的整个字符数组。但是,如果你只能“编码”Unicode数据(如果使用编码字符串方法,Python会尝试将字节字符串隐式转换为unicode) - 所以你必须知道数据源的编码。将数据解码为unicode(在正在运行的程序中)后,可以将其编码为所需的输出(例如ASCII或“quopri_codec”),并在调用时将“errors”关键字参数设置为“ignore”或“xmlcharrefreplace”编码。

要更好地理解它,请查看Python中的codecs documentation

例如,假设你的输入数据是在iso8859_15(也就是latin1或cp1252 put或2个char定义)中编写的,那么你真的想要压制任何非英文字符:

s = client.service.GetData('data1')
s = s.decode("iso88159_15").encode("ASCII", errors="ignore")
sr = '<root>%s</root>' % s
root = ET.fromstring(sr)

Otoh,因为您正在编码xml,所以将xml引用放入您不想要的字符 处理不应该伤害 - (因为编码utf-8也不会伤害):

s = s.decode("iso88159_15").encode("ASCII", errors="xmlcharrefreplace")