Python:如果行以 "ggggg" 开头,如何拆分字符串?
Python: How do you split a string if the line starts with "ggggg"?
这对我来说似乎很简单,但出于某种原因我无法 python 在以下内容上正确拆分。
f = open('text', 'r')
x = f.read()
f.close()
result = x.split('^ggggg', 1)[0]
文件 "text" 具有以下内容:
aaaaa1234
bbbbb1234
ccccc1234
ggggg1234
hhhhh1234
我认为 "result" 会包含 ggggg 行之前的所有内容,但它只包含整个文本。如何让 python 在行首以 "ggggg" 开头的位置拆分?
首先,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))
这两个选项都会生成一个字符串列表。
str.split()
不采用正则表达式。
但是,您可以使用字符串 '\nggggg',如果 \n
不在文件的顶部,它将匹配。
另一种可能性是使用正则表达式函数,documented here。
不阅读所有文件会更好,但对于一般知识,这里是如何轻松处理您的问题,字符串明智...
result = x[0:x.find("ggggg")]
如果我没有正确理解你的问题,你想将 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()
Python 拆分功能根本不需要。我用简单的字符串函数得到了相同的结果。如果您要求严格使用列表和拆分功能回答,我们深表歉意。
#!/usr/bin/python
fh=open('text', 'r')
for line in fh:
if line.startswith(ggggg): break
print line
print "DONE"
fh.close()
这对我来说似乎很简单,但出于某种原因我无法 python 在以下内容上正确拆分。
f = open('text', 'r')
x = f.read()
f.close()
result = x.split('^ggggg', 1)[0]
文件 "text" 具有以下内容:
aaaaa1234
bbbbb1234
ccccc1234
ggggg1234
hhhhh1234
我认为 "result" 会包含 ggggg 行之前的所有内容,但它只包含整个文本。如何让 python 在行首以 "ggggg" 开头的位置拆分?
首先,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))
这两个选项都会生成一个字符串列表。
str.split()
不采用正则表达式。
但是,您可以使用字符串 '\nggggg',如果 \n
不在文件的顶部,它将匹配。
另一种可能性是使用正则表达式函数,documented here。
不阅读所有文件会更好,但对于一般知识,这里是如何轻松处理您的问题,字符串明智...
result = x[0:x.find("ggggg")]
如果我没有正确理解你的问题,你想将 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()
Python 拆分功能根本不需要。我用简单的字符串函数得到了相同的结果。如果您要求严格使用列表和拆分功能回答,我们深表歉意。
#!/usr/bin/python
fh=open('text', 'r')
for line in fh:
if line.startswith(ggggg): break
print line
print "DONE"
fh.close()