14

我有一个文件,当我打开它时,它会打印出一些段落。我需要将这些段落与空格连接在一起以形成一大段文本。

例如

for data in open('file.txt'):
    print data

有这样的输出:

Hello my name is blah. What is your name?
Hello your name is blah. What is my name?

输出怎么会是这样的?:

Hello my name is blah. What is your name? Hello your name is blah. What is my name?

我试过用这样的空格替换换行符:

for data in open('file.txt'):
      updatedData = data.replace('\n',' ')

但这只会摆脱空行,不会加入段落

并尝试像这样加入:

for data in open('file.txt'):
    joinedData = " ".join(data)

但这用空格分隔每个字符,同时也没有摆脱段落格式。

4

3 回答 3

24

你可以使用str.join

with open('file.txt') as f:
    print " ".join(line.strip() for line in f)  

line.strip()将从行的两端删除所有类型的空格。您可以使用line.rstrip("\n")仅删除尾随"\n".

如果file.txt包含:

Hello my name is blah. What is your name?
Hello your name is blah. What is my name?

那么输出将是:

Hello my name is blah. What is your name? Hello your name is blah. What is my name?
于 2013-05-06T06:52:54.687 回答
7

您正在遍历各个行,并且print是添加换行符的语句。以下将起作用:

for data in open('file.txt'):
    print data.rstrip('\n'),

使用尾随逗号,print不添加换行符,并且调用仅从.rstrip()行中删除尾随换行符。

或者,您需要将所有读取和剥离的行传递给' '.join(),而不是每一行本身。python 中的字符串是 to 的序列,因此 line 中包含的字符串在传递给自己时被解释为单独的字符 to ' '.join()

以下代码使用了两个新技巧;上下文管理器和列表理解:

with open('file.txt') as inputfile:
    print ' '.join([line.rstrip('\n') for line in inputfile])

该语句使用文件对象作为上下文管理器,这意味着当我们完成语句with下方缩进的块时,文件将自动关闭。with[.. for .. in ..]语法从inputfile对象生成一个列表,我们将每一行转换为末尾没有换行符的版本。

于 2013-05-06T06:53:01.423 回答
6
data = open('file.txt').read().replace('\n', '')
于 2013-05-06T07:01:15.220 回答