如果我有这种格式的文件:
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.
答案 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()[:])