2017-05-31 23 views
-1

我有一个文本文件,包含一些单词,每个单独一行。我如何创建一个新的文本文件,将原始文件中的每2或3或X行/单词放在一行中?使用Python处理文本文件中的行

例如,这里是输入:

one 

two 

three 

four 

five 

six 

seven 

eight 

和输出我想要的东西:

one two 

three four 

five six 

seven eight 
+0

你能描述你有什么问题吗?一般来说,您会读取文本文件的内容,获取想要增加的行(但是您可以确定),然后将所有行写入新文件。你究竟在哪里卡住?读取文件,写入文件? – Lomtrur

+0

如果没有足够的行,预期的行为是什么?例如,您的文件具有“One Two Three”作为行,您想要合并每两行。 “三”会发生什么? – Lomtrur

+1

解决方案概述:将所有单词读入列表中,然后重复从列表中取出_n_个单词并将它们写入输出文件的同一行,直到用完单词。使用'x [pos:pos + n]'从'pos'位置开始返回列表'x'的子列表,长度不超过'n'个元素。 – 9000

回答

0

我已经写了这个,开始你。它读取第一个文件'input.txt',然后将指定数量的行写入新文件'new.txt'。

lines_to_write = 5 #amount of lines to write from old file to new 

with open('input.txt') as f: 
    data = f.readlines() 

with open('new.txt', 'w') as f: 
    for x in range(lines_to_write): 
     f.write(data[x]) 

这显示了如何操纵文件,并且应该是您开始的良好基础。

0

看来你想写一行可变数量的行。所以,我写了一个列表理解,将结合可变数量的行。

with open("in.txt","r") as fi, open("out.txt","w") as fo: 
    li = fi.readlines() 
    inBetween = 2 
    fo.write("\n".join(" ".join(line.strip() for line in li[i:i+inBetween]) for i in range(0,len(li),inBetween))) 
0

每下联:

for x in xrange(len(v.splitlines())): 
    if x%2 == 0: 
     print " ".join(v.splitlines()[x:x+2]) 

每隔二行:

for x in xrange(len(v.splitlines())): 
    if x%3 == 0: 
     print " ".join(v.splitlines()[x:x+3] 

短:

[ " ".join(v.splitlines()[x:x+2]) for x in xrange(len(v.splitlines())) if x%2 == 0 ] 
[ " ".join(v.splitlines()[x:x+3]) for x in xrange(len(v.splitlines())) if x%3 == 0 ] 

等等...