通过根据一组字符将文件拆分为列表项,将文本文件读入python
我有一个包含以下内容的纯文本文件:通过根据一组字符将文件拆分为列表项,将文本文件读入python,python,list,readfile,splice,dna-sequence,Python,List,Readfile,Splice,Dna Sequence,我有一个包含以下内容的纯文本文件: @M00964: XXXXX YYY + ZZZZ @M00964: XXXXX YYY + ZZZZ @M00964: XXXXX YYY + ZZZZ 我想把它读到一个列表中,根据ID代码@M00964将其分为几个项目,即: ['@M00964: XXXXX YYY + ZZZZ' '@M00964: XXXXX YYY + ZZZZ' '@M00964: XXXXX YYY + ZZZZ'] 我试过使用 in_file = open(fileNa
@M00964: XXXXX
YYY
+
ZZZZ
@M00964: XXXXX
YYY
+
ZZZZ
@M00964: XXXXX
YYY
+
ZZZZ
我想把它读到一个列表中,根据ID代码@M00964
将其分为几个项目,即:
['@M00964: XXXXX
YYY
+
ZZZZ'
'@M00964: XXXXX
YYY
+
ZZZZ'
'@M00964: XXXXX
YYY
+
ZZZZ']
我试过使用
in_file = open(fileName,"r")
sequences = in_file.read().split('@M00964')[1:]
in_file.close()
但这会删除ID序列@M00964
。有没有办法保留这个ID序列
另外一个问题是,是否有办法在列表中保留空白(而不是使用/n符号)
我的总体目标是读入这组项,以前2项为例,将它们写回一个文本文件,保持所有原始格式 只需在@符号上拆分即可:
with open(fileName,"r") as in_file:
sequences = in_file.read().replace("@","###@").split('###')
针对您的示例,您不能只执行以下操作:
in_file = open(fileName, 'r')
file = in_file.readlines()
new_list = [''.join(file[i*4:(i+1)*4]) for i in range(int(len(file)/4))]
list_no_n = [item.replace('\n','') for item in new_list]
print new_list
print list_no_n
[扩展表格]
new_list = []
for i in range(int(len(file)/4)): #Iterates through 1/4 of the length of the file lines.
#This is because we will be dealing in groups of 4 lines
new_list.append(''.join(file[i*4:(i+1)*4])) #Joins four lines together into a string and adds it to the new_list
[写入新文件]
write_list = ''.join(new_list).split('\n')
output_file = open(filename, 'w')
output_file.writelines(write_list)
如果您的文件很大,并且不想将整个内容保存在内存中,则可以使用以下帮助函数对单个记录进行迭代:
def chunk_records(filepath)
with open(filepath, 'r') as f:
record = []
for line in f:
# could use regex for more complicated matching
if line.startswith('@M00964') and record:
yield ''.join(record)
record = []
else:
record.append(line)
if record:
yield ''.join(record)
像这样使用它
for record in chunk_records('/your/filename.txt'):
...
或者如果你想把整件事都记在记忆里:
records = list(chunk_records('/your/filename.txt'))
.read()
读取一行。尝试使用读取所有行的.readlines()
,然后在上拆分“\n”
您能否详细说明“在列表中保留空白(而不是有符号)”的含义?\n
只是“换行符”的简写,即空白。项目看起来像什么?上面的示例列表只有一项。看起来像FASTQ,其中一条记录总是4行。如果您想要前2条记录,只需打印第一行2*4
。@fredtantini Err,我想您需要检查一下。Read接受一个size参数,如果没有,则读取整个文件@M00946@Steven如果文件较大,Rumbalski的RAM效率更高。我选择了最简单的解决方案。嗨,对不起,我上个月才学会python,你能解释一下这段代码的实际功能吗?Thankyou@user3460300,代码将每四行分组,并将它们连接成一个字符串。然后,它将四行组成的组合并成一个列表。我将更新我的答案,以显示我正在做的事情的扩展形式。@user3460300,没问题。祝你好运@用户3460300,注意:我还创建了另一个名为list\u no\n
的变量。这与new\u list
相同,但不包含任何\n
字符,因此可用于脚本内的数据处理。如果要将字符串写入另一个文件,可以使用原始的新列表
字符串及其保留的\n
字符,并保留其格式。当然,您可以选择只写入前两组数据,因为它是一个列表。因此,当我将前两组数据写回文本文件时,我如何才能保持文本文件的格式,而不是让所有数据都与/n字符对齐?此外,谢谢你,我已经设法让第一位工作完美!!文件中的换行符很重要,所以OP应该用'\n'
而不是'
.@Steven Rumbalski,谢谢你,我现在就来看看如何使用它。@rmartinjak你是说用'/n'替换上面代码中的''?@martinjak:换行符从来没有被剥离过,所以不需要重新添加。当在文件中的行上迭代时,python会留下以结尾的行。哦,事实上,我完全忘记了这一点