我在文本板上有一组行。
例如:
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
答案 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))