Python - 将txt文件放入列表中

时间:2012-12-28 22:01:40

标签: python list file-io python-3.x

我正在尝试读取文件并将文本保存为包含字符串的列表, (列表中的每个对象都是一个字符串,在文本中是一行) 我只是设法逐行打印文本,而不是列表。

文本是一长串的生物学内容(如果你问我的随机信(:) 和 -

    def read_proteome ( filename ):
       f= open(filename).readlines()
       for line in f:
          print(line)

只打印文件(确实分隔了行..)

我哪里出错了? 如何将其设置为列表?

4 个答案:

答案 0 :(得分:5)

.readlines() is a list的结果。只需打印f

print(f)

答案 1 :(得分:1)

Martijn Pieters已经提供了一个简单而完整的答案,但值得学习如何自己解决这些问题。它通常更快,并且不会花费你六个下注票。

首先,您可以使用for line in f:这一事实意味着f显然是某种list-ish对象,因为它可以在for循环中以相同的方式使用一个list可以。从技术上讲,这意味着它是“可迭代的”。

也许这意味着它已经是list了?如果是这样,你已经完成了。如果没有,list函数会将任意迭代变为list,因此,您只需添加f = list(f)就可以了。

你怎么知道哪个?

好吧,您可以在代码中添加print(type(f))并查看其打印内容。如果它说list,你就完成了;如果还有其他内容,则需要添加转换行f = list(f)

通过交互式方式而不是在脚本中执行此操作通常更容易:

>>> f = open(filename).readlines()
>>> type(f)
list
>>> f
['first line\n', 'second line\n', 'last line\n']

如果你把它分解成碎片,你可以分别看到每一件的类型:

>>> filename = 'C:/foo.txt'
>>> type(filename)
str
>>> fileobj = open(filename)
>>> type(fileobj)
_io.TextIOWrapper
>>> lines = fileobj.readlines()
>>> type(lines)
list

当您将所有这些放在一行lines=open('C:/foo.txt').readlines()时,最终结果与您分三步完成相同 - lineslist

但是,如果你不能通过实验来解决问题,因为你不知道该尝试什么呢?

嗯,交互式解释器有内置的帮助:

>>> fileobj = open(filename)
>>> help(fileobject.readlines)
Help on built-in function readlines:

readlines(...)
    Return a list of lines from the stream.

    hint can be specified to control the number of lines read: no more
    lines will be read if the total size (in bytes/characters) of all
    lines so far exceeds hint.

它说它返回list

或者,您可以查看the documentation。试着猜测readlines在3.x中的位置实际上有点复杂,因为open返回的东西的类型并不明显......但你可以只使用左边的“快速搜索”,你会找到io.ioBase.readlines,它会给你相同的答案:

  

readlines(hint=-1)

     

从流中读取并返回行列表。可以指定提示来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过提示,则不会再读取行。

答案 2 :(得分:0)

正如Martijn所说,.readlines()将文件转换为列表并循环遍历它们。但是,这就是我认为你要做的事情。

with open("file.txt", 'r') as file:
    print file.read().split("\n")

答案 3 :(得分:-2)

正如Martijn所说,readlines()方法返回python documentation中所述的列表。

如果您需要将字符串转换为列表,请使用:ast helper

import ast
stringList = "{'a':'text'}"
realList = ast.literal_eval(stringList)
print realList

希望这是你所需要的!