【问题标题】:How do you turn multiple lines of text in a file into one line of text in python?如何将文件中的多行文本转换为python中的一行文本?
【发布时间】:2016-11-01 19:33:19
【问题描述】:

我有一个文本文件,每行都有一个数字值,我试图将所有值压缩到一行中,它们之间有一个空格。这是我到目前为止所拥有的,但它不起作用:

for line in f1:
    line = line.rstrip('\n')
    f2.write(line)

f1.close()
f2.close()

【问题讨论】:

  • 请显示输入和所需输出的简短示例。为什么您的程序不起作用?

标签: python string list file lines


【解决方案1】:

这样就可以了:

with open("f1", "r") as f1:
    with open("f2", "w") as f2:
        f2.write(" ".join(map(lambda x: x.strip("\n"), f1.readlines())))

从 f1 中取出所有行,去掉“\n”,将它们与" " 连接起来,然后将该字符串写入新文件。

【讨论】:

  • 不知道你是否能写到f2以读取模式打开。
  • @ap,是的,只是复制/粘贴
  • 直接使用f2.write(" ".join(f1.readlines()))会不会更好?
  • @rsm 不,因为这不会去掉行尾的回车
【解决方案2】:

只需打印它们之间的空格:

...

for i, line in enumerate(f1):
    space = " " if i != 0 else ""
    line = line.rstrip('\n')
    f2.write(space + line)

f1.close()
f2.close()

如果文件不是巨大(即它们适合内存),更简单的方法是:

with open("foo") as f1, open("bar", 'w') as f2:
    f2.write(" ".join(line.rstrip('\n') for line in f1))

【讨论】:

    【解决方案3】:

    如果您使用的是 Python 2.7+ 或 Python 3.x,并且文件的大小不高,您可能可以在内存中完成:

    with open(filename1, 'r') as fin, open(filename2, 'w+') as fout:
        lines = fin.readlines()
        cleaned = [line.strip() for line in lines]
        joined = ' '.join(cleaned)
        fout.write(joined)
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2011-08-28
      • 2013-06-08
      • 2013-05-13
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多