簡體   English   中英

給定位置和長度,從文件中提取字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM