如何读取文件并将数据存储到列表中

时间:2014-02-18 02:40:47

标签: python file

如果我有这种格式的文件:

1 2 3 4 5
6 7 8 9 10

在Python中读取文件并将每个数字存储到列表中的正确方法是什么?

x_table = []
for eachLine in filename_1:
#Set up temp variable
    x_table.append([])
    tmpStr = ''
#Loop through each character in the line
    for char in eachLine:
    #Check whether the char is a number
        if char.isdigit():
            tmpStr += char
        elif char == ' ' and tmpStr != '':
            x_table[eachLine].append(int(char))

我收到了这个错误:

type: list indices must be integers, not str.

6 个答案:

答案 0 :(得分:0)

阅读每一行并使用split()将数字分成不同的数字:

mat = []
for line in open('file.txt').readlines():
    mat.append(line.split())

之后,如果需要,您可以验证所有行是否具有相同数量的元素。

答案 1 :(得分:0)

eachLine是一个字符串(更具体地说是文档中的一行),因此您不能将其用作x_table数组数组的索引。

你可以保持一个运行计数:

x_table = []
idx = 0
for eachLine in filename_1:
    # ...
    x_table[idx].append(int(char))
    idx += 1

编辑:或者,如果你想采用elias建议的方法(见下文),你可以使用列表理解来修剪不是数字的元素:

raw_mat = []
f = open('file.txt')
for line in f.readlines():
    raw_mat.append(line.split())
f.close()

mat = []
for row in raw_mat:
    mat.append([i for i in row if i.isdigit()])

答案 2 :(得分:0)

如果您需要数字处理,此功能将起作用:http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html 除非您需要更改数组数组(数据被加载到numpy.ndarray中,如果您需要数字和数学处理,这是有效的。)

另一种解决方案:

如果你需要一个数组数组并且你不想改变你的核心代码,请注意for ... in ...中的每个元素都不是索引位置,而是实际元素。 / p>

获取索引位置do:for i,v in enumerate(filename_1):

即使这样,如果filename_1是一个字符串,那也不行。你应该在那里指定一个文件对象(它是可迭代的,并且逐行)。

对于每一行(eachLine),您可以将以下代码附加到x_table:

x_table.append([int(s) for s in eachLine.split()])
#eachLine.split() will break eachLine by whitespace-strings.

记得在这里捕捉异常。

完整代码:

x_table = []
for eachLine in open(filename_1, "r"):
    x_table.append([int(k) for k in eachLine.split()])

numpy版本的完整代码:

import numpy
x_table = numpy.loadtxt(open(filename_1,"r").read())

记得在两个代码中捕获异常。

答案 3 :(得分:0)

x_table = []
for line in filename_1:
    numbers = map(int, line.split(' '))
    x_table.append(numbers)

照顾:

  • 多位数字
  • 负数(减号)

答案 4 :(得分:0)

您可以使用正则表达式。此示例将分析小数,负数和排除文本。

"""Contents of test.txt:
1 2 3.14 4 5 0 text
6 7 -8 9 10 -99.99
some other text
1.0 0.5
"""

import re

filename_1 = open("test.txt", 'r')
values = re.findall(r"-*\d+\.*\d*", filename_1.read())

print values

请注意,这将返回一个列表。然后,您可以将值转换为int或float。

答案 5 :(得分:0)

简单:

file = open("myfile.dat", "r")

matrix = []
for line in file:
    matrix.append(line.split()[:])