-2

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

文本是一长串生物材料(如果你问我,随机字母 (:) 和-

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

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

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

4

4 回答 4

5

的结果.readlines() 一个列表。只需打印f

print(f)
于 2012-12-28T22:09:04.717 回答
1

Martijn Pieters 已经给出了一个简单而完整的答案,但值得学习如何自己弄清楚这些事情。它通常更快,并且不会花费您六次反对票。

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

也许这意味着它已经是list? 如果是这样,你已经完成了。如果没有,该list函数将接受任何可迭代并将其变为 a 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(),最终结果就像你分三步完成一样——<code>lines 是一个list.

但是,如果您因为不知道该尝试什么而无法通过实验来解决问题怎么办?

好吧,交互式解释器具有内置帮助:

>>> 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.

或者,您可以查看文档。尝试猜测readlines可能在 3.x 中的位置实际上有点复杂,因为open返回的东西的类型并不明显……但是您可以使用左侧的“快速搜索”,您会找到io.ioBase.readlines,它为您提供相同的答案:

readlines(hint=-1)

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

于 2012-12-28T22:44:23.537 回答
0

正如 Martijn 所说, .readlines() 将文件转换为列表并在它们之间循环。但是,这就是我认为您正在尝试做的事情。

with open("file.txt", 'r') as file:
    print file.read().split("\n")
于 2013-09-01T20:26:59.600 回答
-2

正如 Martijn 所说,readlines() 方法返回一个列表,如 python文档中所述。

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

导入 ast
stringList = "{'a':'text'}"
realList = ast.literal_eval(stringList)
打印真实列表

希望这是你需要的!

于 2012-12-28T22:19:49.360 回答