如何从python中的txt文件制作数字列表?

时间:2020-06-01 17:02:37

标签: python

我有一个文本文件,其中包含数字52、2、103、592、2090、34452、0、1,但排列为一列(彼此之间)。我想将数字导入python并创建一个列表

L=[52,2,103,592,2090,34452,0,1]

到目前为止,我设法做到的最好的是:

txtfile=open('file.txt')

L=[]
for line in txtfile:
    L.append(line.rstrip())

print(L)

返回:

L=['52','2','103','592','2090','34452','0','1']

但是数字周围的'困扰着我。

感谢您的帮助。

8 个答案:

答案 0 :(得分:2)

您应该尝试使用列表理解和“ with”关键字,以确保您不会忘记关闭文件。

with open('test.txt') as f:
    l = [int(line) for line in f]
print(l)

答案 1 :(得分:1)

您可以使用int将它们转换为整数:

txtfile=open('file.txt')

L=[]
for line in txtfile:
    L.append(int(line.rstrip()))
txtfile.close()
print(L)

[52, 2, 103, 592, 2090, 34452, 0, 1]

答案 2 :(得分:1)

您可以使用int()将字符串转换为整数,但是我还要强调使用with关键字来处理文件。

L = []
with open('file.txt') as txtfile:
    for line in txtfile:
        L.append(int(line.rstrip()))

编辑:您也可以像这样使用formap,而无需split循环阅读:

with open('file.txt') as txtfile:
    L = list(map(int, txtfile.read().split('\n')))

答案 3 :(得分:0)

类似于Asocia的答案,但我先定义列表的长度(这可能会稍微提高速度,并且可以说是一种更好的做法):

txtfile=open('file.txt')

L = [0] * len(list(txtfile))

for lineIdx, line in enumerate(txtfile):
    L[lineIdx] = line.rstrip()

print(L)

我希望这会有所帮助。

答案 4 :(得分:0)

尝试以下操作:

with open('s.txt') as num:
    numbers = num.read()
    n= numbers.split()
    lst = []
    for x in range(len(n)):
        nu = n[x]
        lst.append(int(nu))
    print(lst)

输出:

[1, 2, 3, 3, 4, 5, 6]

答案 5 :(得分:0)

尝试

txtfile=open('file.txt')
L=[]
for line in txtfile:
    L.append(line.rstrip())

a = L[0].split(',')
print sorted(a, key = int)

如果在使用with打开文件时关闭了该文件,那就更好了

with open('file.txt') as txtfile:

     b = [x for x in txtfile]
     c = b[0].split(',')
     print sorted(list(map(int, c)))

答案 6 :(得分:0)

如果要将它们隐藏为Integers,则可以在Python中使用int(string)函数。

<div class="inline-flex">
  <button class="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-l">
    Group
  </button>
  <button class="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-r">
    Filter
  </button>
</div>

根据Python的官方文档,如果您想读取列表中文件的所有行,则可以使用一种更简短,更“优雅”的解决方案,也可以使用list(f)或f.readlines()。

txtfile=open('file.txt')

L=[]
for line in txtfile:
    L.append(int(line.rstrip()))

print(L)

只是一个建议:

此外,您可能还需要考虑将数据存储在JSON文件中。这样做的好处是,您可以使用它在用另一种语言编写的应用程序之间进行通信。

docs

Python允许您使用称为JSON(JavaScript对象表示法)的流行数据交换格式。名为json的标准模块可以获取Python数据层次结构,并将其转换为字符串表示形式;此过程称为序列化。从字符串表示形式重建数据称为反序列化。在序列化和反序列化之间,代表对象的字符串可能已存储在文件或数据中,或者已通过网络连接发送到某个远程机器。

答案 7 :(得分:0)

  • 但是数字周围的'困扰着我:使用int(string, base)

    返回一个整数值,该整数值等于给定基数中的二进制字符串。检查here!更多

  • 但排成一列(彼此下方)
  • 返回L = ['52','2','103','592','2090','34452','0','1']
  • >

假设:

  • under each other排列的数字不带逗号,根据问题返回['52','2','103','592','2090','34452','0','1']

file.txt:

52
2
103
592
2090
34452
0
1

答案:

  • 想象file.txt有1000个数字。

方法1:使用问题中提到的列表

print([int(i.rstrip()) for i in open('file.txt')])

内存大小

  • 将所有数字放入列表将需要9032个字节

建议

方法2:使用生成器

print(*(int(i.rstrip()) for i in open('file.txt')))

内存大小

  • 将所有1000个数字放入生成器中仅需80个字节。

  • 像列表一样可迭代,但以普通的括号()

  • 包围,可提高内存使用效率

缺点

  • 生成器无法按索引访问
print(g[4])   # TypeError: 'generator' object has no attribute '__getitem__'

结论

  • 如果您只想将数字保留在内存中,并希望在必要时对其进行迭代,则建议的方法是使用生成器,因为其内存效率高
  • 如果要按索引访问生成器,则始终可以将生成器转换为类似list(generator)的列表

希望这会有所帮助!