0

所以我有一个坐标系指向一个大文件中的一个位置。

文件的第一行长度可变(但始终以“>”字符开头),从那里开始,行长度为 50 个字符,然后是新行。这可以持续数百万行。

我希望能够找到例如 1,000,000-1,000,050 之间的字符(将在 1000000-1000050 处输入)并将它们写入字符串。我怎样才能找到文件中的那个位置?我尝试使用 f.seek(1000000),但遇到了第一行长度的问题。即使我将第一行的长度添加到 f.seek 函数中的 1000000,我仍然每 50 个字符得到一个额外的字符(换行符)。

这些数字很少会像 1000000-1000050 一样干净。

4

2 回答 2

1
line_length=50
char_n=10000000 #zero-based index
count=50

with open('f.txt') as f:
    f.readline()
    start=f.tell()
    f.seek(start+int(char_n/line_length)*(line_length+1)+char_n%line_length)
    print(f.read(count))
于 2012-06-14T21:09:42.660 回答
0

这就是我最终使用的。它似乎适用于我使用过的小型试验。

#reads input from user for exon coordinates
coords = raw_input("Please enter the coordinates of the Exon you would like to use\n")

#Reads the first part of coords for the chromosome (and, therefore, filename)
chr_index = coords[:coords.index(":")] + ".fa"

#get starting coordinate
coordStart = coords[coords.index(":")+1:coords.index("-")]

#get ending coordinate
coordEnd = coords[coords.index("-")+1:]

#open the file
f = open(chr_index, "r")

f.seek()
lenFirstLine = len(f.readline())

#create string containing the exon sequence
#move to start of the exon
f.seek(lenFirstLine+coordStart+coordstart/50)

#read the number of characters = to the len of the exon into exon
exon = f.read(coordEnd-coordStart)
于 2012-06-14T21:35:34.750 回答