在Python中将readline数据读入数组的问题

0 投票
3 回答
547 浏览
提问于 2025-04-17 01:11

这是我的代码:

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 文件是空的,要么这段代码不对,要么你把某些重要的部分删掉了。

撰写回答