如何使用python在连续文件中找到第n个delimeter的出现

时间:2017-07-11 08:36:35

标签: python python-2.6

输入文件是连续的,我想用新行分割第n个分隔符。

我尝试了以下内容:

with open ("ip.txt") as f:
    for line in f:
        A = line.split("Ç")
        B= ['Ç'.join(x) for x in [A[i:i + 10] for i in xrange(0, len(A), 10)]]
with open ("op.txt","w") as outfile:
    outfile.write("Ç\n".join(s))

我得到了内存错误。

我该如何避免它?

1 个答案:

答案 0 :(得分:0)

根据评论中的说明做出新答案:

def split(text, separator, each):
    if each < 1:
        raise AttributeError('each must be >= 1')

    parts = text.split(separator)

    if len(parts) <= each:
        return [text]

    lines = []
    for idx in range(0, len(parts), each):
        segment = separator.join(parts[idx:idx + each])
        if idx + each < len(parts):
            segment = '%s%s' % (segment, separator)
        lines.append(segment)

    return '\n'.join(lines)


print(split('1¢2¢3¢4¢5¢6¢7¢8¢9¢10¢11¢12¢13¢14¢15¢16¢17¢18¢19¢20¢21¢22', '¢', 10))

哪个输出:

1¢2¢3¢4¢5¢6¢7¢8¢9¢10¢
11¢12¢13¢14¢15¢16¢17¢18¢19¢20¢
21¢22

旧回答:

我确实不确定你想要的确切结果,所以我要给出一个返回两个项目列表的代码片段:首先是分割前的字符串部分,其次是后面的字符串部分分裂。如果您想要稍微不同的结果,可以轻松更改此内容。

def split(text, separator, position):
    if position < 1:
        raise AttributeError('position must be >= 1')

    parts = text.split(separator)

    if len(parts) <= position:
        return [text]

    return [separator.join(parts[:position]), separator.join(parts[position:])]

这里有一些例子:

>>> split('part0&part1&part2', '&', 1)
['part0', 'part1&part2']

>>> split('part0&part1&part2', '&', 2)
['part0&part1', 'part2']

>>> split('part0&part1&part2', '&', 3)
['part0&part1&part2']

>>> split('part0&part1&part2', '&', 0)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Users/paco/Desktop/so/main.py", line 3, in split
    raise AttributeError('position must be >= 1')
AttributeError: position must be >= 1