【问题标题】:How to write to beginning and end of every line in a text file?如何写入文本文件中每一行的开头和结尾?
【发布时间】:2011-12-17 12:31:55
【问题描述】:

我目前正在寻找一种在 Python 中写入文本文件每一行的开头和结尾的方法。

例如,

当前 TXT 文档:

Jimmy
Was
Here

将第一个 VALUE 写入每行的开头

111Jimmy
111Was
111Here

将第二个 VALUE 写入每行的末尾

111Jimmy222
111Was222
111Here222

在 Google 上似乎找不到任何描述如何正确完成此操作的内容。我找到了写入特定行的方法,但不是所有的都以这种方式。

【问题讨论】:

标签: python file-io text-files


【解决方案1】:
prefix = '111'
suffix = '222'

with open('source.txt', 'r') as src:
    with open('dest.txt', 'w') as dest:
       for line in src:
           dest.write('%s%s%s\n' % (prefix, line.rstrip('\n'), suffix))

【讨论】:

  • 如果suffix不是定长字符串怎么办?
  • @BehnamHeydari:应该没什么区别。
  • 所以%s的数量与suffix的长度无关?
  • @BehnamHeydari:正确。三个%s 表示三个项目被插入到字符串中。这里的三个项目是前缀、行本身和后缀。
  • 对于使用 Python 3.6+ 的人,您可以使用 f-strings(但请注意,can't put \n inside the brackets):ss = line.rstrip('\n'); dest.write(f"{prefix}{ss}{suffix}\n")
【解决方案2】:

您可以通过使用fileinputinplace=1 来更改文件而无需打开多个文件:

import fileinput
for line in fileinput.input('test.txt', inplace=1):
    print '{0}{1}{2}'.format('111', line.rstrip('\n'), '222')

【讨论】:

  • 在 Python 2.5 或更低版本中,将打印行替换为 print '%s%s%s' % ('111', line[:-1], '222')
  • -1:永远不要使用line[:-1],以防最后一行没有终止。使用line.rstrip('\n')
【解决方案3】:

假设您已经在列表中使用 readlines() 读取了文件

value1 = "" # appended at first
value2 = "" # appended at last
data = file.readlines()
data = [ ( value1 + str.rstrip('\n') + value2 + "\n" ) for str in data ]

然后将数据写回文件....

【讨论】:

  • 这必须将整个文件保存在内存中,而不是 Steven Rumbalski 的回答。
【解决方案4】:
f1o = open("input.txt", "r")
f2o = open("output.txt", "w")

for line in f1o:
    f2o.write("111%s222\n" % line.replace("\n"))

f1o.close()
f2o.close()

【讨论】:

  • replace 接受两个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多