尝试使用用户输入值从文件中获取输出,然后在 python 中打印该值

trying to get an output from a file using the user input value then print the value in python

我正在努力学习 python 并且我编写了这个脚本,它没有向我显示正确的输出。我缺少什么?

我有这样一个文本文件:

test

test1

test2

test3

test4

#test5

test6

#test7

#test8

任务 1:

  1. 打开文件:我得到了这部分
  2. *不要打印或忽略以 "#""#" 开头的任何行:我想我得到了这部分 (fread2)

这是我的代码:

fopen=open('file1.txt',mode='r+')
fread=fopen.read()
fread2="\n".join([line.strip() for line in fread.splitlines() if not line.startswith('#')])

print(fread2)

fopen.close()

输出:

test

test1

test2

test3

test4

test6

注意:test5、7、8没有打印出来。成功!

任务 2:

  1. 要求用户输入文本:已完成
  2. 来自 fread2 输出 - 使用用户“输入”值,如果值退出,则仅打印该行:失败!!

见以下代码:

fopen=open('file1.txt',mode='r+')
fread=fopen.read()
fread2="\n".join([line.strip() for line in fread.splitlines() if not line.startswith('#')])
text=input("Enter text: ")
for x in fread2:
    if text == "":
        continue
    if text in x:
        print(x)
fopen.close()

输出

Enter text: test

我哪里错了?

您的 fread2 是单个字符串,因此当您调用 for x in fread2 时,您是在遍历每个字母,而不是文件的每一行。您可以通过执行以下操作来查看:

for x in fread2:
    print(x)

您必须将所有行保存在列表中或迭代文件行。

示例

尝试遵循此代码:

fopen=open('file1.txt',mode='r+')
fread=fopen.read()

fread2=[]

for line in fread.splitlines():
    if not line.startswith('#'):
        fread2.append(line) #this is important! 
                            #If you write "+=" you'll iterate on every single letter

text=input("Enter text: ")
for x in fread2:
    if text in x:
        print("I've found "+x)
fopen.close()

如果用户输入“2”,您的输出将是:


更新

根据评论中的要求,如果你想检查用户输入是否等于你必须替换的文件行

if text in x:

if text==x:

因此,如果用户写入 "text""text2"、"text3" 等行将不会被打印出来!

这是一个输出示例:

如评论中所述,fread2 变量是一个包含所有行的大字符串。当您遍历一个字符串时,您将遍历它的 个字符 。因此,循环的示例迭代是:

if "test" in "e":
    print(x)

很容易看出这不是您想要的。

要解决这个问题,您可以通过以下方式遍历这些行:

for x in fread2.split("\n"):

但是,我个人认为更 优雅 的解决方案是先将行保存在列表中,并且仅更改打印方式:

with open('file1.txt',mode='r+') as fopen:
    fread = [line.strip() for line in fopen if not line.startswith('#')]

# first assignment
print(*fread, sep='\n')

#second assignment
text = input("Enter text: ")
for line in fread:
    if text == line:
        print(line)

请注意,我使用 with 打开文件,这是惯用的打开方式。