Ind*_*die 7 python string split
我还在学习Python,我有一个我无法解决的问题.我有一个非常长的字符串(数百万行),我希望根据指定的出处次数将其拆分成较小的字符串长度.
例如:
ABCDEF
//
GHIJKLMN
//
OPQ
//
RSTLN
//
OPQR
//
STUVW
//
XYZ
//
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想基于"//"进行拆分,并在第n次出现定界符之前返回所有行的字符串.
因此,将字符串除以1的输入将返回:
ABCDEF
Run Code Online (Sandbox Code Playgroud)
将字符串拆分为//的输入将返回:
ABCDEF
//
GHIJKLMN
Run Code Online (Sandbox Code Playgroud)
将字符串按//除以3的输入将返回:
ABCDEF
//
GHIJKLMN
//
OPQ
Run Code Online (Sandbox Code Playgroud)
等等... 但是,当我只是尝试拆分整个字符串并使用"//"并且只使用各个索引时,原始的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)
Run Code Online (Sandbox Code Playgroud)
您可以使用它将输出写入新文件,如下所示:
python split.py > newfile.txt
Run Code Online (Sandbox Code Playgroud)
通过一些额外的工作,您可以使用它argparse来将参数传递给程序。