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