[英]Extracting a string from a file, given a position and length
我正在編寫代碼以按位置檢索文本文件中的特定字符。 例如,我想要文本中1043-1049位置之間的字符序列,例如:
.... acddex .......
...等等。 我希望該文本中包含“ acddex”序列。 我知道它的順序和位置。 到目前為止,我只能打開文件並輸入所需的位置,但是我不知道如何計算整個文本的順序,更難的是,整個文件是示例的組合,因此我還必須設置重復/刷新“>”的特定字符之間的字符計數,如:
agoejngodgj
因此,當我知道所需序列從何處開始時,我需要這些樣本中的序列,它們位於同一文件中。 那我該怎么做呢?
注意:這不是一個短序列,大約200,000個字符,例如,我希望它向我報告第1046個至第1052個位置之間的字符。
在所需序列的開始位置查找字節位置 ,然后調用read並告訴它所需的字節數。
例:
starting_position = XXX # replace XXX with the starting position of your
# desired string
read_length = YYY # replace YYY with how many characters you want to read
with open("filename.txt") as f:
f.seek(starting_position)
st = f.read(read_length)
# st now has your characters
注意:此答案假定文件是ASCII編碼的,或使用其他編碼,其中每個字符在文件中僅一個字節。
如果要提取很多序列,請嘗試按順序順序獲取它們,然后再開始查找,這樣就不會在文件中四處走動。 工作正常后,請考慮使用mmap對文件進行性能分析,而不是常規打開。 您可能會看到一些加速。 (但與所有優化一樣,請確保先進行概要分析,然后查看代碼的這一部分是否確實是需要優化的部分!)
stuff = "agoejngodgfjnsodjnfvsojdnvodfjnodjnfbodjngodjgndojgndlkfnvldfkngldjnfgdfjgnldjfn"
print(stuff[10:20])
這將從位置10到20打印字符。
因此,如果您想要1043-1049:
print(stuff[1043:1049])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.