在Python中,从大字符串中去除空白的简单且内存高效的方法是什么

在Python中,从大字符串中去除空白的简单且内存高效的方法是什么,python,strip,Python,Strip,我有一个大于100mb的大字符串。 我想删除前导空格和尾随空格。 什么是一种简单且内存有效的方法 考虑以下问题: 将对1Gb文件进行分区以进行并行处理。 该文件分为10个相等的部分,每个部分长100 Mb。 这些文件的很大一部分是空白,因此每个100MB部分的前导和尾随空白都将被删除 是否有一种内存效率高且简单的方法可以从每个部件的头部和尾部去除这些空白。那么,目标系统上的内存是什么?除非整个过程的RAM小于220MB左右,否则我认为str.strip应该在那里使用 人们可以交互地使用1GB文件

我有一个大于100mb的大字符串。 我想删除前导空格和尾随空格。 什么是一种简单且内存有效的方法

考虑以下问题:

将对1Gb文件进行分区以进行并行处理。 该文件分为10个相等的部分,每个部分长100 Mb。 这些文件的很大一部分是空白,因此每个100MB部分的前导和尾随空白都将被删除


是否有一种内存效率高且简单的方法可以从每个部件的头部和尾部去除这些空白。

那么,目标系统上的内存是什么?除非整个过程的RAM小于220MB左右,否则我认为
str.strip
应该在那里使用

人们可以交互地使用1GB文件来创建一个剥离的100MB部分——但这将是成本密集型的——必须在一个中间缓冲区(虽然可以在一个文件中分配)中保留完整的100MB,这远远不是您所要求的“简单”——特别是与“strip()”相比


不过,如果有必要的话,这可能是从100MB分区中去除空白的好方法

这是很久以前做的。这些函数返回剥离的字符串,但您可以对它们进行返工,以仅返回开始索引和结束索引,并且您可以在原始字符串上使用它们,而不会产生内存开销

inp = "00000a00f00000000t00h000000"

def strip_start(inp, char):
    inlen = len(inp)
    start=0
    found=0
    for t in xrange(0, inlen):
        if inp[t] != char:
            start = t
            found=1
            break

    return start, found

def strip_end(inp, char):
    inlen = len(inp)
    end=0
    found=0
    for t in xrange(inlen-1, -1, -1):
        if inp[t] != char:
            end = t+1
            found=1
            break

    return end, found

def strip_simple(inp, char):
    return inp[strip_start(inp, char)[0]:strip_end(inp, char)[0]]

def strip_by_blocks(inp, char, siz): #possibly better performance for large "siz" and "inp"
    inlen = len(inp)
    block = char*siz
    start=0
    for t in xrange(0, inlen, siz):
        if inp[t:t+siz] != block:
            start = strip_start(inp[t:t+siz], char)
            if start[1] == 1:
                start = t+start[0]
            else:
                start = 0
            break
    end=0
    if inlen>=siz:
        for t in xrange(inlen-siz, -siz, -siz):
            if inp[t:t+siz] != block:
                end = strip_end(inp[t:t+siz], char)
                if end[1] == 1:
                    end = t+end[0]
                else:
                    end = 0
                break
    else:
        end = strip_end(inp, char)[0]

    return inp[start:end]

print strip_simple(inp, "0")
print strip_by_blocks(inp, "0", 4)

string.strip()
还有其他方法吗?string.strip(),就像在new_s=s中一样。strip()似乎正在创建中间字符串副本。这在多个进程中发生,导致大量内存消耗。字符串是不可变的。你必须创建一个副本来剥离字符串。字符串来自哪里?也许你可以首先阻止空白被添加到它中。@EdTate把这个问题提出来。