选择特定索引,在外部文本文件中的特定行中进行更改

Selecting a specific index, in a specific line in an external text file to alter

我遇到以下逻辑问题。

我有一个外部 txt 文件,例如: characters.txt:

James, 24, blue, yes
Liam, 29, brown, yes
Michael, 40, brown, yes

如果我想将第 2 行中的 yes 更改为 'no',我该怎么做?

您可以逐行阅读,然后更改第二行。或者您可以使用 pandas 作为 csv 文件读取它,然后以这种方式进行更改。

f = open("characters.txt", "r")
print(f.readlines())

然后写回来

或者使用pandas(更好)

data=pandas.read_csv('character.txt', sep=',names=['name', 'age', 'color','answer']))

然后您可以通过以下方式访问答案栏:

answers = data['answer']
answers[1] = 'no'
data['answer'] = answers

这只是一个伪代码,如果你愿意的话,这可以做得更多

根据我的理解,最好的解决方案是将文件读入 Python (数组或 df),在那里修改并覆盖原始文件;无法直接修改外部文件。

请在此处检查答案:How to modify a text file?

PS。您可能希望将 txt 内容格式化为代码。

我认为我的解决方案是最简单的。

  1. 您应该首先阅读 characters.txt 中的行,如下所示:
lines = open("char.txt", "r").readlines()
  1. 接下来您需要更改您想要的文本 (是到否),它在第二行:
lines[1] = lines[1].replace("yes", "no")
  1. 最后,您需要将所有内容写回文件:
open("char.txt", "w").writelines(lines)

最终代码:

lines = open("char.txt", "r").readlines()
lines[1] = lines[1].replace("yes", "no")
open("char.txt", "w").writelines(lines)

如果其他小伙伴有什么要补充的,欢迎在此评论。谢谢

由于您的文本文件是 CSV-like,您可以使用内置的 csv module

from io import StringIO
import csv

# your input file, wrapped in StringIO to avoid writing it to file for me
s_in = StringIO("""\
James, 24, blue, yes
Liam, 29, brown, yes
Michael, 40, brown, yes
""")

# read file contents
reader = csv.reader(s_in)
lines = list(reader)

# prepare output file, might be same as input.
# again using StringIO for me to avoid writing to file, use with/open
s_out = StringIO()

# create csv writer, iterate through data, replace yes -> no on line 2, write
writer = csv.writer(s_out)
for i, line in enumerate(lines, 1):
    if i == 2:
        line[-1] = " no"  # note the space here since delimiter is ", "
    writer.writerow(line)

# print the contents of the file
print(s_out.getvalue())