【问题标题】:Read and Save list of numbers as numbers in txt files in python在python的txt文件中读取并保存数字列表作为数字
【发布时间】:2021-02-23 12:51:00
【问题描述】:

我在 python 中有浮点数列表。 我想将一些列表保存在 txt 文件中,然后按原样逐个读取它们。但是在我编写了以下代码之后,我发现 str(i) 转换了一个 str 中的每个数字。我不能像他们写的那样读他们。 Ps 我有 10,000 个结果列表,所以我想将每个列表保存在一行中。

result = [-0.33434,0.4434, 4343....]
with open("out.txt", w) as out:
  for i in result:
      out.write(str(i)+' ')
 out.write("\n")

【问题讨论】:

  • 我不明白“str(i)convert each digit in one str”是什么意思。你能举一个浮点数的例子,它是如何转换为str的,你希望它如何转换为str?因为如果您需要读取在此代码中生成的文件,那么 with open("out.txt") as inp: numbers = [[float(word) for word in line.split()] for line in inp] 应该可以工作。
  • 是的,因为当我执行 out.write(i) 时说我应该是要写入文件中的字符串
  • @Boris 我写的代码不能很好地保存列表,所以我需要修复它以将每个名为 result 的列表保存在 txt 文件中并逐个列表读取它们
  • 您需要对代码进行一些修复:修复缩进,最后一行应以 2 个空格开头(不是一个,以便与上面的 for i in result: 行匹配)和 @987654326 @ 应该是 open("out.txt", "w")w 引号 "w"),然后它对我有用,我得到一个文件,其中有 1 行,上面有一堆数字。还是您希望每个号码都在自己的行上?然后将倒数第二行更改为out.write(str(i)+'\n')
  • @Boris 我需要将整个列表写在一行中,当我使用我编写的代码保存在文件中时,当我阅读它时,它会将每个数字视为单个项目列表。因为 str(i) 认为每个数字都是一个 str。我希望它很清楚

标签: python python-3.x list file


【解决方案1】:

更新答案

对于多个列表,将它们全部放在一个列表中并将其写入 pkl/txt 文件。

import pickle
import numpy as np

results = [
    [1.456,2.245,-3.441], 
    [4.53, 4.55, 1.22]
]

np.savetxt("results.txt", results)   # write

#read
result = np.loadtxt("results.txt")
print(result.tolist())

如果您希望将名称与列表关联,请考虑使用dict。但是,你只能使用pickle

import pickle

results = {
    "result1": [1.456,2.245,-3.441], 
    "result2": [4.53, 4.55, 1.22],
}

# write
with open("results.pkl", "wb") as resultFile:
    pickle.dump(results, resultFile)
    
# read
with open("results.pkl", "rb") as resultFile:
    result = pickle.load(resultFile)
    print(result)

原答案

为此使用picklenumpy,因为这更适合此任务。

使用pickle

import pickle

result1 = [1.456,2.245,-3.441]

# write
with open("result1.pkl", "wb") as resultFile:
    pickle.dump(x, resultFile)

# read
with open("result1.pkl", "rb") as resultFile:
    result = pickle.load(resultFile)
    print(result)

使用numpy


import numpy as np

result1 = [1.456,2.245,-3.441]

np.savetxt("result1.txt", result1)   # write

#read
result = np.loadtxt("result1.txt")
print(result.tolist())

【讨论】:

  • 这是只保存一个列表并读取一个列表的代码,我如何保存多个列表并在 pickle 或 numpy 中读取它们
【解决方案2】:

如果您不想使用库来执行此操作,您可以简单地 join 每个列表通过已知的分隔符,然后将生成的字符串写入文件。

在这里,我假设您有一个名为 allResults 的列表列表,其格式为

allResults = [
       [-0.332,434,0.4434,4865],
       [9.456,-0.540,-7.06540,5.05453],
       # ... and so on
    ]

separator = "," 

with open("out.txt", "w") as out_file:
    for l in allResults:
        out_string = separator.join(str(x) for x in l) + "\n"
        out_file.write(out_string)

现在,out.txt 包含:

-0.332,434,0.4434,4865
9.456,-0.54,-7.0654,5.05453

然后要读取文件,您可以读取每一行,用分隔符将其拆分,将拆分字符串的每个元素转换为浮点数,然后将新列表放入您的列表列表中:

all_lists = []
with open("out.txt", "r") as in_file:
    for line in in_file:
        new_list = [float(x) for x in line.split(separator)]
        all_lists.append(new_list)

现在您已经返回了列表列表:

all_lists: [[-0.332, 434.0, 0.4434, 4865.0], [9.456, -0.54, -7.0654, 5.05453]]

【讨论】:

    【解决方案3】:

    如果您想再次阅读,请阅读该行并将其拆分为 ' '(空格)。这应该为您提供浮点数的字符串表示形式。之后您可以使用 float(num) 方法将其转换回数字

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多