如何在python中将文本文件中的所有行连接在一起?

2024-05-15 22:49:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,当我打开它时,它会打印出一些段落。我需要把这些段落和一个空格连在一起,形成一个大的正文。

例如

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)

但这会用空格分隔每个字符,同时也不会去掉段落格式。


Tags: nameintxthelloforyourdatais
3条回答

您正在单个行上循环,而添加新行的是print语句。以下方法可行:

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

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

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

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

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

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

您可以使用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?
data = open('file.txt').read().replace('\n', '')

相关问题 更多 >