2009-12-26 33 views
0

我有一個奇怪的問題。我需要使用Python讀取(從txt文件)只有在預定義的偏移量範圍內存在的子字符串。比方說5-8和12-16。Python中的格式化輸入

例如,如果文件中的行是這樣的:

abcdefghi akdhflskdhfhglskdjfhghsldk 

然後我想讀這兩個詞 - 「EFGH」和「kdhfl」。因爲在單詞「efgh」中,字符「e」的偏移量是5,「h」的偏移量是8.同樣,另一個單詞「kdhfl」。

請注意,空格也會添加到偏移量。事實上,我的文件中的空格在每行中都不是「一致發生」,不能依賴於提取感興趣的單詞。這就是爲什麼我必須在補償上存款。

我希望我能夠清楚地說明問題。

等待答覆!

編輯 -

是,在每行空白量能變化,佔偏移也。例如,考慮這兩行 -

abcz d 
a bc d 

在這兩種情況下,我都將最終字符「d」的偏移視爲相同。正如我所說,文件中的空白不一致,我不能依賴它們。我需要根據偏移量來拾取角色。你的答案是否仍然成立?

回答

5

假定它是一個文件,

for line in open("file"): 
    print line[4:8] , line[11:16] 
1

要從偏移量中提取部分,只需將每行讀入一個字符串,然後使用切片([from:to])訪問子字符串。

目前還不清楚你對不一致的空白有什麼看法。如果空白添加到偏移量,它必須一致纔有意義。如果空白量可能會改變,但實際上會補償​​偏移量,則無法可靠地提取數據。

在您添加的示例中,只要d's offset保持不變,就可以使用切片來提取它。

>>> s = 'a bc d' 
>>> s[5:6] 
'd' 
>>> s = 'abc d' 
>>> s[5:6] 
'd' 
+0

是,空白量能變化,佔偏移也。 例如,考慮這兩條線 - ABC d 一個BC d 在兩種情況下,我查看最終字符「d」爲相同的偏移量。 正如我所說,文件中的空白不一致,我不能依靠它們。我需要根據偏移量來拾取角色。 你的答案仍然有效嗎? – Gitmo 2009-12-26 15:11:47

+0

對不起,請忽略上述評論。目前尚不清楚。我已經對主要問題進行了編輯。 – Gitmo 2009-12-26 15:12:48

+0

@Eli 非常感謝。我是Python的新手。現在我覺得我覺得這個問題很微不足道。對不起,打擾:) – Gitmo 2009-12-26 15:22:57

-1

什麼是阻止您使用正則表達式?除了空格之外,偏移量會有所不同嗎?

/.{4}(.{4}).{4}(.{4})/ 
+0

我編輯了我的問題一點,使其更加清晰。我無法理解你的解決方案,但它仍然有效嗎? – Gitmo 2009-12-26 15:14:55

+1

正則表達式不是一切的工具。爲了在不變的索引處提取數據,簡單的切片更加清晰快速 – 2009-12-26 15:15:13

+0

保存regexen直到您確定簡單的切片或字符串方法不會足夠。 Python字符串有許多非常好的方法。而不是建立一個RE來匹配「^前綴」,並調用re.match,你可以使用s.startswith(「prefix」);與endswith類似。在這種情況下,字符串切片遠遠優於斜線和點。 – PaulMcG 2009-12-26 19:16:21