【问题标题】:How to read and write multiple lines of a text file in Python如何在 Python 中读取和写入文本文件的多行
【发布时间】:2020-11-25 12:49:55
【问题描述】:

我正在尝试在 Python 中读取和写入文本文件的多行。我的目标是使用我给脚本的输入来指定我想要更改的行。该脚本在指定单行时有效,但在多行时无效。

例如,假设我有这个文件:

Item 1
Item 2
Item 3

当尝试对单行执行以下操作时,它工作正常:

a_file = open("filename.yml", "r")
list_of_lines = a_file.readlines()
list_of_lines[1] = "Item: " + (input('Input: ')) + "\n"

a_file = open("filename.yml", "w")
a_file.writelines(list_of_lines)
a_file.close()

但我似乎无法弄清楚如何为多行文本文件应用相同的输入。 我尝试过但没有用的方法:

a_file = open("filename.yml", "r")
list_of_lines = a_file.readlines()
list_of_lines[1][2] = "Item: " + (input('some input: ')) + "\n"

a_file = open("filename.yml", "w")
a_file.writelines(list_of_lines)
a_file.close()

【问题讨论】:

  • list_of_lines[1] = ..., list_of_lines[2] = ...?
  • list_of_lines 是文件行的列表。您需要遍历此列表以逐行获取每一行。或者您可以访问索引从 0 开始的每一行。

标签: python file readlines


【解决方案1】:

你使用 for 循环:

with open('file.txt', 'r') as f:
    list_of_lines = f.readlines()
    t = f"Item {input('some input: ')}\n"
    for i in range(len(list_of_lines)):
        if i in [1, 2]:
            list_of_lines[i] = t

with open("file.txt", "w") as f:
    f.writelines(list_of_lines)

file.txt:

Item 1
Item 2
Item 3

输入:

some input: hello

结果file.txt:

Item 1
Item hello
Item hello

您还可以将list 理解与内置的enumerate 方法一起使用:

t = f"Item {input('some input: ')}\n"
d = [1, 2]

with open('file.txt', 'r') as f:
    list_of_lines = [t if i in d else v for i, v in enumerate(f)]
    
with open("file.txt", "w") as f:
    f.writelines(list_of_lines)

【讨论】:

  • 伟大而详细的答案。解决了我的问题,今天学到了一些新东西。非常感谢!
猜你喜欢
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2020-08-19
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多