选择特定索引,在外部文本文件中的特定行中进行更改
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 内容格式化为代码。
我认为我的解决方案是最简单的。
- 您应该首先阅读 characters.txt 中的行,如下所示:
lines = open("char.txt", "r").readlines()
- 接下来您需要更改您想要的文本 (是到否),它在第二行:
lines[1] = lines[1].replace("yes", "no")
- 最后,您需要将所有内容写回文件:
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())
我遇到以下逻辑问题。
我有一个外部 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 内容格式化为代码。
我认为我的解决方案是最简单的。
- 您应该首先阅读 characters.txt 中的行,如下所示:
lines = open("char.txt", "r").readlines()
- 接下来您需要更改您想要的文本 (是到否),它在第二行:
lines[1] = lines[1].replace("yes", "no")
- 最后,您需要将所有内容写回文件:
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())