遇到换行符或逗号时拆分/剥离一组行



我在一个文本板中有一组行。

例如:

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

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

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

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

假设"textpad"的意思是文本文件,您有几个选项。对于如图所示的小文件,最简单的解决方案是将整个文件中的read作为字符串,并用逗号+换行符替换逗号,如@TimBiegeleisen的回答所示。

对于较大的文件,由于内存限制,这可能不是一个好的选择。在这种情况下,为了通用性,我喜欢对文件的行进行迭代。这里有一个相当简单的生成器,它的行为类似于普通的文件迭代器,但也使用逗号进行拆分:

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)

让它接受split模式作为参数,可以选择保留尾部空格,并返回插入换行符的整行,这将非常简单。

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

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

这是一个带有演示的IDEOne链接。

要获得整个文件的内容,就像readlines读取的一样,只需包装list:

lines = list(spliterator(file))

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

output.writelines(spliterator(file))

最新更新