在Python中将readline数据读入数组的问题
这是我的代码:
arr = []
inp = open ("test.txt","r")
for line in inp.readlines():
for i in line.split():
arr.append(i)
print arr
结果是 arr 是一个空数组 [],如果我尝试打印 arr[0] 或其他东西,它会告诉我索引超出范围。我想把文本中的数据提取出来放到数组里,或者放到一个我可以读取数据的列表里。我试过很多方法,这个方法在我看来是最简单的,虽然可能是错的,哈哈。
既然我在这里问问题,我还想在那个文档中搜索一行以 "start" 开头的内容,然后把那行数据放到数组或列表里,最好的方法是什么呢?谢谢你的帮助,我刚开始学 Python,现在很晚了,所以这是我最后的办法。
3 个回答
0
我猜你是想让这个列表里包含文件的每一行。在这种情况下,你不需要在循环里面再加一个多余的'if'语句,因为readlines方法已经会一行一行地读取文件了。
如果文件是空的,那么这个数组也会是空的。
另外,如果你只想把以“start”开头的行添加到数组里,你可以这样做:
arr = []
inp = open("test.txt","r")
for line in inp.readlines():
if line.startswith("start"):
arr.append(line)
print arr
或者你可以写得更简短一些:
arr = [x for x in open('text.txt') if x.startswith('start')]
2
其实你不需要调用 .readlines()
。open()
函数会返回一个文件句柄,这个句柄可以像迭代器一样工作,它会一次返回一行内容。而且,如果你使用的是现代版本的 Python,最好用 with
这个写法来处理文件,这样更规范。所以下面这样写:
arr = []
with open("test.txt", "r") as inp:
for line in inp:
for word in line.split():
arr.append(word)
print arr
我觉得这样写完全没问题,我测试过了,效果很好。
顺便说一下,我忍不住想用一行的列表推导式来写:
arr = [word for line in open("test.txt") for word in line.split()]
print arr
不过,就算是列表推导式也应该用 with()
。所以:
with open("test.txt", "r") as inp:
arr = [word for line in inp for word in line.split()]
print arr
1
这段代码没问题。要么是 test.txt
文件是空的,要么这段代码不对,要么你把某些重要的部分删掉了。