我仍在学习Python,但有一个我无法解决的问题。我有一个很长的字符串(几百万行长),我希望根据指定的分界点出现次数将其拆分为一个较小的字符串长度。
例如:
ABCDEF
//
GHIJKLMN
//
OPQ
//
RSTLN
//
OPQR
//
STUVW
//
XYZ
//
在这种情况下,我想基于“//”进行拆分,并返回第n次出现定界符之前的所有行的字符串。
因此,将字符串除以//除以1的输入将返回:
ABCDEF
将字符串除以//除以2的输入将返回:
ABCDEF
//
GHIJKLMN
将字符串除以////减3的输入将返回:
ABCDEF
//
GHIJKLMN
//
OPQ
依此类推...但是,当我只是尝试通过“//”拆分整个字符串并仅使用单个索引时,原始的200万行字符串的长度似乎是一个问题。 (我遇到了内存错误)也许Python无法一次处理那么多行?所以我不能那样做。
我正在寻找一种方法,当我可能只需要100个索引时,不需要将整个字符串分成十万个索引,而是从头开始直到某个点,停止并返回它之前的所有内容,我认为可能还会更快?我希望我的问题尽可能清楚。
有没有简单或优雅的方法来实现这一目标?谢谢!
最佳答案
如果要使用文件而不是内存中的字符串,这是另一个答案。
该版本的功能是读取行并立即将它们打印出来,直到找到指定数量的定界符为止(不需要额外的内存来存储整个字符串)。
def file_split(file_name, delimiter, n=1):
with open(file_name) as fh:
for line in fh:
line = line.rstrip() # use .rstrip("\n") to only strip newlines
if line == delimiter:
n -= 1
if n <= 0:
return
print line
file_split('data.txt', '//', 3)
您可以使用此命令将输出写入新文件,如下所示:
python split.py > newfile.txt
通过一些额外的工作,您可以使用
argparse
将参数传递给程序。关于python - Python-按定界符出现次数拆分大字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30646543/