将多行文本文档合并为一个

时间:2015-02-15 19:47:12

标签: python-2.7 lines

我有成千上万的文本文档,它们有不同数量的文本。我想将所有行分别合并到每个文档中的一行中。那是例如:

abcd 
efgh 
ijkl

应该变为

abcd efgh ijkl 

我尝试使用sed命令,但由于每个文档中的行数不同,因此无法达到我想要的效果。请建议我能做什么。我在ubuntu上工作python。一行命令会有很大帮助。提前谢谢!

3 个答案:

答案 0 :(得分:1)

使用python不是必需的。这就是诀窍:

% echo `cat input.txt` > output.txt

要应用于一堆文件,您可以使用循环。例如。如果你正在使用bash

for inputfile in /path/to/directory/with/files/* ; do
    echo `cat ${inputfile}` > ${inputfile}2
done

答案 1 :(得分:1)

如果将脚本放在与文件相同的目录中,则以下代码应该有效。

import os
count = 0
for doc in os.listdir('C:\Users\B\Desktop\\newdocs'):
    if doc.endswith(".txt"):
        with open(doc, 'r') as f:
            single_line = ''.join([line for line in f])
            single_space = ' '.join(single_line.split())

        with open("new_doc{}.txt".format(count) , "w") as doc:
            doc.write(single_space)
        count += 1
    else:
        continue

@ inspectorG4dget的代码比我的代码更紧凑 - 因此我觉得它更好。我尽量让我的用户友好。希望它有所帮助!

答案 2 :(得分:0)

假设你的所有文件都在一个目录中,扩展名为.txt,并且你可以访问带有bash的linux盒子,你可以像这样使用tr:

for i in *.txt ; do tr '\n' ' ' < $i > $i.one; done

对于每个“file.txt”,这将产生一个“file.txt.one”,其中所有文本都在一行上。

如果你想要一个直接对文件进行操作的解决方案,你可以使用gnu sed(注意这将关闭你的启动文件 - 在尝试之前备份目录):

sed  -i -n 'H;${x;s|\n| |g;p};' *.txt

如果您的文件不在同一目录中,则可以使用find with -exec:

find . -name "*.txt" -exec YOUR_COMMAND \{\} \;

如果这不起作用,可能还有一些关于你要做的事情的细节会有所帮助。