【问题标题】:Formatting/Displaying list in python在python中格式化/显示列表
【发布时间】:2012-10-11 15:38:14
【问题描述】:

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

我希望我能得到您的意见。谢谢!

【问题讨论】:

  • 在写入文件之前,将所有特殊字符替换为空格或不替换。 str.replace('[],', '') 或者你可以使用 re.sub 函数,它基本上做同样的工作。
  • 也检查一下。这应该可以帮助您格式化输出 stackoverflow.com/questions/12831438/…
  • list_s = list([...]) - 您不需要额外的list() 调用,因为您已经使用list comprehension 创建了一个列表。您可以使用f.writelines(list_s) 一次编写整个列表,而无需循环遍历它。

标签: python list string-formatting


【解决方案1】:

那些字符不在列表中,它们列表中。

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

【讨论】:

  • 我明白了你的意思,但我正在研究如何使用上面使用的代码删除文本文件中的这些字符。谢谢你的信息。
  • 是的,我试过了,它产生了一个错误,因为列表中的某些元素没有值。感谢您的帮助
【解决方案2】:
for i, item in enumerate(test):
    if i and i % 4 == 0:
        f.write("\n")
    f.write("%-9s|   " % item)

【讨论】:

  • 非常感谢!这是我正在寻找的格式化方法。
  • 我可以为每列设置空格吗?如果您对此有任何想法。谢谢!
  • 正如 Alex L 所说,使用 string.format,如下所示:[f.write('{0:9s}|{1:9s}|{2:9s}|{3:9s}|\n'.format(test[i], test[i+1], test[i+2], test[i+3])) for i in xrange(0, len(test), 4)]
【解决方案3】:

正如@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 了解更多信息

【讨论】:

    【解决方案4】:

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

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

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

    例如,假设您的输入数据以 iso8859_15 编码(又名 latin1 或 cp1252 put or 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")
    

    【讨论】:

    • 我指的特殊字符是列表中的字符,如[],',只是想将列表中的数据本身提取出来,放到一个文本文件中。感谢您的洞察力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多