Python: 将文件中特定行放入列表
你好,
我遇到了一个问题:
有一个文件,结构如下:
'>some cookies
chocolatejelly
peanutbuttermacadamia
doublecoconutapple
'>some icecream
cherryvanillaamaretto
peanuthaselnuttiramisu
bananacoffee
'>some other stuff
letsseewhatfancythings
wegotinhere
目标:把每一行包含'>'之后的所有内容放进一个列表,作为一个完整的字符串
代码:
def parseSequenceIntoDictionary(filename):
lis=[]
seq=''
with open(filename, 'r') as fp:
for line in fp:
if('>' not in line):
seq+=line.rstrip()
elif('>' in line):
lis.append(seq)
seq=''
lis.remove('')
return lis
这个函数会逐行读取文件,如果某一行没有'>',它就把后面的所有行连接起来,并去掉换行符'\n'。如果遇到'>',它会把之前连接的字符串自动添加到列表中,然后清空字符串'seq',准备连接下一段内容。
问题是:
以一个输入文件为例,它只把'一些饼干'和'一些冰淇淋'的内容放进列表里,而没有把'一些其他东西'的内容放进去。所以我们得到的结果是:
[chocolatejelly
peanutbuttermacadamia
doublecoconutapple, cherryvanillaamaretto
peanuthaselnuttiramisu
bananacoffee] but not
[chocolatejelly
peanutbuttermacadamia
doublecoconutapple, cherryvanillaamaretto
peanuthaselnuttiramisu
bananacoffee, letsseewhatfancythings
wegotinhere]
这里面有什么错误的思路吗?在循环中可能有逻辑错误,但我不知道在哪里。
提前感谢任何提示!
5 个回答
在编程中,有时候我们需要处理一些数据,这些数据可能是从用户那里输入的,或者是从其他地方获取的。为了让程序能够理解这些数据,我们通常会把它们转换成一种特定的格式。这个过程叫做“数据转换”。
比如说,如果你有一个数字字符串“123”,但是程序需要的是数字类型的123,那么你就需要把这个字符串转换成数字。这样,程序才能进行数学运算。
在不同的编程语言中,数据转换的方法可能会有所不同。有些语言提供了简单的函数来完成这个任务,而有些则需要你手动进行转换。
总之,数据转换是编程中一个非常重要的概念,理解它能帮助你更好地处理和使用数据。
my_list = []
with open('file_in.txt') as f:
for line in f:
if line.startswith("'>"):
my_list.append(line.strip().split("'>")[1])
print my_list #['some cookies', 'some icecream', 'some other stuff']
你只有在找到一个以 > 开头的新行时,才会把 seq 加到结果列表里。所以到最后,你的 seq 里会有一些数据(就是你缺少的那些),但你没有把它加到结果列表中。因此,在你的循环结束后,如果 seq 里有数据,就把它加上去,这样就没问题了。
问题在于,你只在遇到包含 '>'
的行时才保存当前的部分 seq
。当文件结束时,你的这个部分仍然是打开的状态,但你并没有把它保存下来。
修复你程序的最简单方法是这样的:
def parseSequenceIntoDictionary(filename):
lis=[]
seq=''
with open(filename, 'r') as fp:
for line in fp:
if('>' not in line):
seq+=line.rstrip()
elif('>' in line):
lis.append(seq)
seq=''
# the file ended
lis.append(seq) # store the last section
lis.remove('')
return lis
顺便提一下,你应该使用 if line.startswith("'>"):
来防止可能出现的错误。