早安全,
我目前正在阅读一个采用以下形式的文本文件:
foo: example1
bar: example2
fizz: buzz
abra: cadabra
并以下列格式输出csv:
foo,bar,fizz,abra
example1,example2,buzz,cadabra
然而," abra"我的文本文件采用以下形式:
foo: example1
bar: example2
fizz: buzz
abra: cadabra
something else
another thing
(new line)
probably another thing
(new line)
some number
这个模式重复多次,我在文本文件中读取,并生成csv。我这样做是通过创建一个字典,其中键是标题,值是与标题后面的文本相对应的值;因此:
myDict = {'foo': ['example1', ..., 'last foo in txt file'], 'bar': ['example2', ... 'last bar in txt file'], ... , 'abra': ['cadabra'], ..., 'last abra in txt file']}
我使用csv.DictWriter方法编写我的csv。但是,我目前正在使用循环:
with open(txtFile, 'r') as f:
for line in f.readlines():
# create lists that maps to header keys
这很有效,如果' abra'之后只有一行txt。因此,为了连接“abra”中的值。列表来自
abraList = ['cadabra', 'something different', '\n', probably another thing', '\n', 'some number']
并将其更改为:
abraList = ['cadabra something different', '\n', probably another thing', '\n', 'some number']
我使用以下内容:
out = []
for i,e in enumerate(abraList):
if e in string.whitespace:
out.append(e)
else:
if 0!=i and out[-1][0] not in string.whitespace:
out.append(out.pop() + ' ' + e)
else:
out.append(e)
有人可以帮助我找到一种方法来匹配' abra'之后的所有值。并且在模式再次开始之前使用' foo'?
谢谢!
答案 0 :(得分:0)
如果您实际上不需要新行,最简单的方法是加入列表并再次拆分:
out = ' '.join(abraList).replace(' \n', '\n').replace('\n ', '\n').split('\n')