(Python)从大文件中切分行直到符号,然后附加到其他文件中——这是最快的方法
我需要你的帮助。我必须删除所有行,直到在file2中遇到第一个'>',并将这些行附加到file1的末尾。实际上,我已经使用linux“split”命令将一个大文件拆分为多个小文件,其中一些条目(以“>”开头)分散在两个文件中。所以,我只想通过将提醒条目复制回一个文件来缝合这些条目(Python)从大文件中切分行直到符号,然后附加到其他文件中——这是最快的方法,python,regex,string,find,Python,Regex,String,Find,我需要你的帮助。我必须删除所有行,直到在file2中遇到第一个'>',并将这些行附加到file1的末尾。实际上,我已经使用linux“split”命令将一个大文件拆分为多个小文件,其中一些条目(以“>”开头)分散在两个文件中。所以,我只想通过将提醒条目复制回一个文件来缝合这些条目 >1 AAAAAAAAAAAAAA CGGGGGGGGGGGGG DEEEEEEEEEEEEE AFGGGGGGGGGGGG DEEEEEEEEEEE 示例文件1: >1 AAAAAAAAAAAAAA C
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
示例文件1:
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
示例文件2:
AFGGGGGGGGGGGG
DEEEEEEEEEEE
>2
AAAABBBBBBBBB
DFFFFFFFFFFFFF
DFFFFFFFSSSS
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
在上面的示例中,File2的前两行属于File1,因此需要从File2中删除并追加到File1的末尾
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
一种方法是:
fh1 = open(file1,'a')
fh2 = open(file2, 'r+')
filelist2 = file2.split('>')
string = filelist2[0]
fh1.write(string)
<SOME WAY TO REMOVE LINES TILL SYMBOL FROM FILE1>
fh1.close()
fh2.close()
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
fh1=打开(文件1,'a')
fh2=打开(文件2,“r+”)
filelist2=file2.split(“>”)
string=filelist2[0]
fh1.写入(字符串)
fh1.关闭()
fh2.关闭()
我知道有几种方法可以实现这一点,但问题是这两个文件都是大的~600MB。此外,这将通过循环在4~10个文件上完成。因此,我正在寻找最有效和最快的方法,因此需要您的建议
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
等待您的建议
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
AK
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
类似于这样的情况?听起来您正试图从一个按任意行号拆分的FASTA文件中重建序列。最好的解决方案是首先在序列边界处拆分它们。使用:
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
根据文档,这将original.fasta拆分为6个大小相对均匀的文件
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
编辑后,您可能还可以使用csplit
而不是split
:
csplit -zk original.fasta "/^>/+<offset>" "{*}"
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
csplit-zk original.fasta/^>/+“{*}”
偏移量是在查找正则表达式时将被跳过的行数(如果没有它,则会将每个序列拆分为单个文件)。您可以根据所需的文件长度使用该值。My take。有两个问题:要连接不同的文件,然后重新打印。因此,为了实现一个干净的实现,我们分别执行这两个步骤
import sys
from itertools import chain
def file_reader(filename):
"Iterate over the lines of file, opening it lazily"
with open(filename) as f:
for i in f:
yield i.rstrip()
filenames = sys.argv[1:]
all_lines = chain(*[ file_reader(fn) for fn in filenames ])
# now all_lines is an iterable that iterates over the all input lines
outf = None
for line in all_lines:
if line.startswith('>'):
# open new file
if outf:
outf.close()
# take the file number from the '>2' line
outf = open('out-%04d.txt' % int(line[1:]), 'w')
# python 2
print >> outf, line
if outf:
outf.close()
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
作为
python resplit.py File1.txt File2.txt
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
并获取out-0001.txt
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
和out-0002.txt
>1
AAAAAAAAAAAAAA
CGGGGGGGGGGGGG
DEEEEEEEEEEEEE
AFGGGGGGGGGGGG
DEEEEEEEEEEE
>2
AAAABBBBBBBBB
DFFFFFFFFFFFFF
DFFFFFFFSSSS
我试着读了很多次你的问题,但我还是什么都不懂。@Antii:如果帖子不清楚,很抱歉,我已经编辑过了。谢谢。我花了一些时间为python3安装了“pyfasta”,而且“pyfasta”的作者也更新了版本,以便更好地与python3兼容。我想我的问题还不够清楚。这是一个很好的解释,但是我想把一个巨大的文件分成几个部分,而不是从文件2的开头剪切遗留序列,然后粘贴到文件1的末尾。对于所有剩余的文件也是如此。保罗的回答正是我所需要的,但从来没有想到会有这样的功能。