【问题标题】:Python - How do I write an array to a text file?Python - 如何将数组写入文本文件?
【发布时间】:2015-02-22 00:42:14
【问题描述】:

我每分钟都会从网络抓取中生成两个数组。下面有两个。如何将它们放在文本文件中?我希望每个数组占用一行,并且我希望它们保留括号和逗号。我在其他主题方面没有找到太多帮助。

[('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')]

[('18,622', '15.027'), ('334', '15.029'), ('3,240', '15.032'), ('11,354', '15.032'), ('13,651', '15.033'), ('96', '15.041'), ('1,997', '15.051'), ('1,760', '15.051'), ('500', '15.052'), ('16,000', '15.053'), ('272', '15.091'), ('3,834', '15.097'), ('8', '15.125'), ('634', '15.141'), ('794', '15.143'), ('528', '15.149'), ('220', '15.150'), ('94', '15.159'), ('91', '15.164')]

【问题讨论】:

  • 为什么它们是数组很重要?您可以对它们进行字符串化并将它们写入文本文件,就像任何其他文本一样。
  • 它们将被另一台运行 Rbx.Lua 的服务器访问,所以我希望它们被组织起来,以便其他服务器更容易使用这些数字。

标签: python arrays file text


【解决方案1】:

考虑到您希望 Rbx.Lua 脚本使用该文件,最好使用 JSON。

repr 可能会产生一行,但您需要在 Lua 中自己解析它。也许不是太难,但如果你想交换其他数据类型,你将需要修改你的 Lua 代码。您可能还会发现repr 并不总是给您一些有用的东西。

使用 JSON 很简单:

Python:

import json

l = [('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')]

with open('l.json', 'w') as outfile:
    json.dump(l, outfile)

$ cat l.json
[["76,433", "15.025"], ["99,714", "15.023"], ["44,236", "15.010"], ["718,725", "15.000"], ["30", "15.000"], ["30", "15.000"], ["15", "15.000"], ["15", "15.000"], ["15", "15.000"], ["15", "15.000"], ["60", "15.000"], ["30", "15.000"], ["15", "15.000"], ["30", "15.000"], ["30", "15.000"], ["60", "15.000"], ["30", "15.000"], ["30", "15.000"], ["15", "15.000"], ["30", "15.000"]]

Rbx.Lua 端见http://wiki.roblox.com/index.php?title=JSON;您将使用DecodeJSON() 转换为 Lua 表。

【讨论】:

  • 换行符 ('\n') 不能在 json 字符串中,因此您始终可以将 json 文档写为单行(换行符将被转义:r'\n')。如果你使用ensure_ascii=False(默认为ensure_ascii=True,因此它被表示为r'\u2028'并且没有问题),你应该小心使用Unicode换行符,例如('\u2028')。顺便说一句,要写入文件,您可以直接传递对象:json.dump(l, outfile) 而不是创建中间字符串。
  • @J.F.Sebastian:谢谢你……我忘记了dump()
  • @mhawke:感谢您的帮助。我明天将使用 JSON(现在是晚上 11:40)。与此同时,我运行我的程序 24 小时并每分钟记录一次,这样我就知道费率的一般高点和低点是什么时候。我也会尝试dump(),如果我明天可以让它工作,我会将你的答案设置为最佳答案。
【解决方案2】:

尝试像这样使用repr函数,它将保持数组结构完整:

v = [('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')]
f.write(repr(v))

阅读更多关于它的信息here

【讨论】:

【解决方案3】:

您可以将它们转换为 str,然后写入文件: 演示:

f = open('your_file', 'w')
a = ['1', '2', '3']
f.write(str(a)+"\n")

在回读时,您可以使用ast.literal_eval

import ast
f = open("your_file")
for x in f:
    x = ast.literal_eval(x.strip())
    # now do your stuff

【讨论】:

  • 我希望他们保留括号和逗号。我还需要他们排成一行。不过感谢您的回复。
  • @GShocked 试一试不会有任何损失
猜你喜欢
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2017-05-31
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多