【问题标题】:Python how to read and split a line to several integersPython如何读取一行并将其拆分为多个整数
【发布时间】:2010-06-25 23:47:48
【问题描述】:

对于以空格/制表符分隔的输入文件,例如:

1 2 3
4 5 6
7 8 9

如何读取行并拆分整数,然后保存到列表或元组中?谢谢。

data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    一种方法,假设子列表在不同的行上:

    with open("filename.txt", 'r') as f:
        data = [map(int, line.split()) for line in f]
    

    请注意,with 声明直到 Python 2.6 才正式发布。如果您使用的是早期版本,则需要这样做

    from __future__ import with_statement
    

    【讨论】:

    【解决方案2】:

    如果您发现自己在处理矩阵或数字表格,我可以建议使用 numpy 包吗?

    import numpy as np
    data = np.loadtxt(input_filename)
    

    【讨论】:

      【解决方案3】:

      tuples = [tuple(int(s) for s in line.split()) for line in open("file.txt").readlines()]

      我喜欢Jeff's map(int, line.split()),而不是内部生成器。

      【讨论】:

      • 这种方式真的将分割的行存储到元组中吗?你能解释一下吗?谢谢。
      • 实际上这会给你一个列表列表,而不是一个元组列表(因为str.split返回一个列表)。基本上它所做的就是打开文件,读入它的行,然后遍历它们(for tup in ...)并在空白处分割每一个。
      • 那么如何存储在一个元组中呢?这是我原来问题的一部分。谢谢。
      • @David:OP 说的是列表或元组,但是很好,谢谢,已编辑。 @Stan:只需从列表中构造一个元组。
      • @Stephen:是的,我的评论是针对我上面的斯坦的评论,而不是你的回答。抱歉没有说清楚。
      【解决方案4】:

      你的意思是,像这样?

      更新

      只需将每个字符串转换为 int

      string = """1 2 3
      4 5 6
      7 8 9"""
      
      data = []
      for line in string.split("\n"):    #split by new line
          data.append( map( int, line.split(" ") ) ) # split by spaces and add 
      
      print( data )
      

      输出:

      [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]]

      [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
      

      哒哒哒!!!

      【讨论】:

      • 我最终使用了映射功能。仍然没有想出另一种方法将所有读取的字符串转换为整数。
      • 哦,我以为你已经知道了我误读了你的我最终使用...
      【解决方案5】:
      def getInts(ln):
          return [int(word) for word in ln.split()]
      
      f = open('myfile.dat')
      dat = [getInts(ln) for ln in f]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-11
        相关资源
        最近更新 更多