0

我是 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

4 回答 4

3

这些字符不在列表,它们列表。

>>> print ''.join(['foo', 'bar', 'baz'])
foobarbaz
于 2012-10-11T04:27:29.437 回答
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输入和输出文档

于 2012-10-11T05:08:29.507 回答
1
for i, item in enumerate(test):
    if i and i % 4 == 0:
        f.write("\n")
    f.write("%-9s|   " % item)
于 2012-10-11T07:10:54.413 回答
0

什么叫“特殊字符”?您拥有的数据的编码是什么?在继续之前,重要的是您确实了解什么是编码,什么是 unicode,并且您获得的世界和数据不限于主要用于英语的 26 个字母。 查看这篇文章以了解它。

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

为了更好地理解它,请查看Python的编解码器文档

例如,假设您的输入数据以 iso8859_15 编码(又名 latin1 或 cp1252 put 或 take 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")
于 2012-10-11T03:44:17.130 回答