我正在尝试读取文件并将文本保存为包含字符串的列表, (列表中的每个对象都是一个字符串,在文本中是一行) 我只是设法逐行打印文本,而不是列表。
文本是一长串的生物学内容(如果你问我的随机信(:) 和 -
def read_proteome ( filename ):
f= open(filename).readlines()
for line in f:
print(line)
只打印文件(确实分隔了行..)
我哪里出错了? 如何将其设置为列表?
答案 0 :(得分:5)
.readlines()
is a list的结果。只需打印f
:
print(f)
答案 1 :(得分:1)
首先,您可以使用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()
时,最终结果与您分三步完成相同 - 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
。
或者,您可以查看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
希望这是你所需要的!