遇到换行符或逗号时分割/分割一组行

时间:2019-01-02 04:15:31

标签: python

我在文本板上有一组行。

例如:

643 ABCF aksdjgk 1q25hgn
239056 dsgkn 32968, 39859 ewktgklh, 35927369
9689846 dklsghdkls 23-608 dsklgnk
ewth834056 sidtguoi,235907 sdkgji,25689-8, 29067490,wtyuoew

我该如何使用python阅读并将文本换成新行以及,(逗号)上的不同列表值?

例如,示例文本的输出应为

643 ABCF aksdjgk 1q25hgn
239056 dsgkn 32968,
39859 ewktgklh,
35927369
9689846 dklsghdkls 23-608 dsklgnk
ewth834056 sidtguoi,
235907 sdkgji,
25689-8,
29067490,
wtyuoew

2 个答案:

答案 0 :(得分:6)

尝试使用re.sub,并将所有逗号替换为逗号,然后换行:

result = re.sub(',\s*', ',\n', input)

请注意,我们实际上匹配,\s*,以删除逗号分隔符后可能出现的所有空白。

答案 1 :(得分:2)

假设“文本板”表示文本文件,则有两个选项。对于所示的小文件,最简单的解决方案是将整个文件中的read作为字符串,并用逗号+换行符替换逗号,如@TimBiegeleisen's answer所示。

对于较大的文件,由于内存限制,这可能不是一个好的选择。在那种情况下,为了通用起见,我喜欢遍历文件的各行。这是一个相当简单的生成器,其行为类似于普通的文件迭代器,但也以逗号分隔:

from itertools import zip_longest, repeat
import re

def spliterator(file):
    for line in file:
        segments = re.split(r',\s*', line)
        ends = repeat(',\n', len(segments) - 1)
        for item in zip_longest(segments, ends, fillvalue=''):
            yield ''.join(item)

使它接受拆分模式作为参数,选择保留尾随空格,并返回插入了换行符的整行,将非常简单。

使用生成器很简单,因为它只包装了普通文件对象或任何其他可迭代的行:

with open('textpad.txt') as file:
    print(''.join(spliterator(file)))

这是一个带有演示的IDEOne link

要获得整个文件的内容,就像readlines读入一样,只需将list换行:

lines = list(spliterator(file))

要写回打开的输出文件,请直接使用writelines

output.writelines(spliterator(file))