2015-12-04 53 views
0

對我來說這似乎很簡單,但由於某種原因,我不能讓python在下面正確拆分。Python:如果行以「ggggg」開頭,如何分割一個字符串?

f = open('text', 'r') 
x = f.read() 
f.close() 
result = x.split('^ggggg', 1)[0] 

隨着文件「文本」具有以下內容:

aaaaa1234 
bbbbb1234 
ccccc1234 
ggggg1234 
hhhhh1234 

我認爲「結果」將包含GGGGG前行的一切,但它只是包含整個文本。如何讓python分割線的前端以「ggggg」開始?

+2

'str.split()'不需要正則表達式。 –

回答

2

str.split()不採取正則表達式。

但是,如果字符串不在文件的頂部,可以使用字符串'\ nggggg',該字符串將在\n上匹配。

另一種可能性是使用正則表達式函數documented here

3

首先,str.split()僅在字面文本上分割,或者在使用None(默認值)的情況下分割任意空白。正則表達式不受支持。你可以只對分裂的\nggggg文件內容:

x.split('\nggggg', 1)[0] 

如果必須使用正則表達式,使用re.split() function

出於效率的考慮,可以轉而通過線環,然後就測試是否符合ggggg啓動和停止迭代有:

result = [] 

with open('text', 'r') as f: 
    for line in f: 
     if line.startswith('ggggg'): 
      break 
     result.append(line) 

這樣,你就不必讀取整個文件。您也可以使用itertools.takewhile()

from itertools import takewhile 
with open('text', 'r') as f: 
    result = list(takewhile(lambda l: not l.startswith('ggggg'), f)) 

這兩個選項都會生成一個字符串列表。

0

沒有閱讀完所有的文件較好,但對於一般知識來說,這裏是如何與你的問題,字符串明智輕鬆應對......

result = x[0:x.find("ggggg")] 
0

如果我正確理解你的問題,你想將result設置爲ggggg行之前的所有內容?

你可以嘗試以下方法:

result = '' 
with open('text','r') as f: // Open file 'text' as 'r'eadonly, 
    f.seek(0) // move the readcursor to the beginning of the document 
    for line in f: // for each line... 
     if not line.startswith('ggggg'): // If 'ggggg' isn't at the beginning of the line.. 
      result = "{0}\n{1}".format(result, line) // append the line to the result variable. 
     else: 
      break 
f.close() 

如果你寧願讓這個它只是忽略了ggggg線,得到了一切,然後嘗試:

result = '' 
with open('text','r') as f: // Open file 'text' as 'r'eadonly, 
    f.seek(0) // move the readcursor to the beginning of the document 
    for line in f: // for each line... 
     if not line.startswith('ggggg'): // If 'ggggg' isn't at the beginning of the line.. 
      result = "{0}\n{1}".format(result, line) // append the line to the result variable. 
     else: 
      continue 
f.close() 
0

Python的分裂功能根本不需要。我用簡單的字符串函數得到相同的結果。道歉,如果你需要嚴格的清單和分裂功能的答案。

#!/usr/bin/python 
fh=open('text', 'r') 

for line in fh: 
    if line.startswith(ggggg): break 
    print line 

print "DONE" 
fh.close()