繁体   English   中英

在Python中将元组列表写入文本文件

[英]Writing a list of tuples to a text file in Python

我有一个格式列表:

("some string", "string symbol", some number)

例如, ("Apples", "=", 10) 我需要将它们写入输出文件,如下所示:

Apples = 10

我在使用write方法时遇到了麻烦。 怎么做到呢?

您可以使用:

for t in some_list:
  f.write(' '.join(str(s) for s in t) + '\n')

其中f是你的file

list_of_tuples = [('Apples', '=', 10), ('Oranges', '<', 20)]
f = open('file.txt', 'w')
for t in list_of_tuples:
    line = ' '.join(str(x) for x in t)
    f.write(line + '\n')
f.close()

给定元组列表,您可以在写入模式下打开文件。 对于列表中的每个元组,将其所有元素转换为字符串,按空格连接以形成字符串,并将带有新行的字符串写入文件。 然后关闭该文件。

编辑:没有意识到你开始使用元组列表。 做出改变以反映这一点。

lot = [('Apples', '=', 10),
       ('Oranges', '<', 20),
       ('Peaches','(Florida)','No stock')]

with open('tototo.txt','w') as f:
    f.write( '\n'.join(' '.join(str(x) for x in tu) for tu in lot) )

在编写之前创建整个文本会使写入一次完成。
前提是文本不是25 GB长....

请注意,在Windows上,如果模式为'w' ,则每次必须写入\\ n时,操作系统都会写入\\ r \\ n ;
如果只想编写\\ n ,则必须将模式定义为'rb'

PS

它是'wb' ,而不是rb'

编辑1

当Python在Windows上以'w'模式写入磁盘时,操作系统Windows将\\ r \\ n序列写为行的末尾,当它有要在磁盘上写入的行时,以及何时必须写入包含换行符的字符串时,这些是什么换行, \\ n单独或\\ r \\ n

如果,出于任何个人的突发奇想,好奇心,宗教信仰,或作为梦游症的症状,或给你的妻子留下深刻印象,或取悦你的反复无常的孩子,或因为生活在你电脑里的精神病鬼并每次正统尖叫\\ r \\ n换行是写在磁盘上,或者只是因为你的算法需要它......是的,你可能想要在磁盘上只写一个换行符\\ n那不是科学的 -小说,它可能真的发生,你现在.....它发生在我,是相信我还是没有,我面对我不得不写一个\\ n独自在Windows磁盘上的事实,没有任何虚无obstat来自一些蟒蛇教皇的补充认可 ....嗯,是有可能发生,然后,在已锁定您的安全带,就可以了,是的,我们可以写一个换行符\\ n在Windows的磁盘上! 是的是的,这是可能的,而不是诅咒的原因

于是,只有在这些情形之一的,如果你有法定年龄,你的所有的精神能力,并喝了过量没有啤酒也没有酒,你可以使用'wb'写换行符\\独自N于Windows中的磁盘上。

但这不是强制性的! 你可以自由地这样做

另一件事是当Python以'r'模式读取文件时,默认情况下启用通用换行支持(参见PEP 278):它包含以下事实:Python在文件中找到的所有类型的换行都转换为单个字符\\ n

但是,您可能还需要在没有任何换行符转换的情况下读取文件。 在这种情况下,您可以在模式'rb'读取特定文件,而不是禁用通用换行支持

但是你没有义务,我也没有煽动任何人这样做或相反。 你做你想做的事,所有荒谬的东西都是解释一些有用的知识。

编辑2

我曾尝试使用writelines() ,但我没想过使用%格式来添加带有sipmplicity的换行符。

现在我已经看到了Derek Litz的答案,我有一个明显的解决方案:

lot = [('Apples', '=', 10),
       ('Nuts', '<', 20),
       ('Peaches','(Florida)','No stock')]

with open('tototo.txt','w') as f:
    f.writelines( '%s %s %s\n' % tu for tu in lot )

只有当所有元组的元组长度为3时

>>> data= ("Apples", "=", 10)
>>> print " ".join(map(str, data))
Apples = 10

简单。 将元组/列表映射到字符串,然后用" "连接它们。

没有人提到过:

with open('file_name', 'w') as f:
    for tuple in tuples:
        f.write('%s %s %s\n' % tuple)

这有几个上升。 理解您正在做的事情更容易,格式非常明显且易于修改,您永远不会忘记使用str(对象)。

与连接解决方​​案相比,它的缺点是如果元组更改大小,它将无法与以下回溯之一一起使用:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

(尝试将它们复制为练习。)

在我看来,如果元组不会有不同的大小,最蟒蛇的事情就是这里提供的版本。

import this #and decide for yourself :)

另外,请参阅资源以获取更多信息(按与问题的相关性顺序):

http://docs.python.org/library/stdtypes.html#string-formatting-operations

http://docs.python.org/library/string.html

http://www.python.org/dev/peps/pep-0292/

此示例将允许您遍历元组列表并将每个元组写入文本文件中的新行。 请注意,我使用unicode而不是字符串:

with open('filename.txt','w') as f:
        for tup in list_of_tuples:
            f.write( u" ".join(map(unicode,tup))+u"\n")

上面的答案首先将您的数据映射到字符串格式,如果您的数据尚未采用unicode格式,这是可以的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM