如何从文本文件中打印特定行?

1 投票
8 回答
501 浏览
提问于 2025-04-18 16:01

我想根据用户输入的内容,打印出特定的一行文字。目前我有了这个:

list = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt")
listo = list.read()
nlines = 0
x = raw_input()
x.lower()
x.capitalize()
if listo.find(x) != -1:
    linesr = listo.index(x)
    defines = list.readlines(linesr)
    print defines
    print linesr
else:
print "Nope!"

但是当我试的时候,行号不对,什么也没打印出来。没有报错,所以我不知道哪里出了问题。

怎么才能写一个程序,打开一个文本文件,并根据用户输入读取特定的一行文字呢?

8 个回答

0

首先,不要把变量命名为 list。这样会覆盖掉 Python 自带的 list 函数。

data_file = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt")

其次,不要用 read() 来读取文件,应该用 readlines(),因为你其实更想要的是按行读取内容。

lines = data_file.readlines()
line_no = int(raw_input("Gimme a line number:"))
try:
    print lines[line_no]
except IndexError:
    print "Nope"
0

如果你要输入文本的话,下面这种方法会很有用。

list = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt")
listo = list.readlines()
nlines = 0
x = raw_input()
x.lower()
x.capitalize()
for sentences in listo:
    if x in sentences:
        print sentences
0
       listo = list.read()

在你完成这个操作后,列表指向的文件已经到达了文件的末尾。所以

       list.readlines() 

如果你不做一些操作,它就无法再次工作。

       list.seek(0)

你需要把指针重新放回文件的开头。

0

第一个问题:x.lower()x.capitalize() 并不会改变原来的字符串。在Python中,字符串是不能被直接修改的。你只能创建新的字符串。x.lower()x.capitalize() 是在生成新的字符串。如果你想让 x 变成新字符串的名字,你需要自己来做这件事:

x = x.lower().capitalize()

第二个问题:当你用 listo = list.read() 读取完整个文件后,你就到了文件的末尾。再尝试从文件中读取内容将不会有任何结果,所以 defines = list.readlines(linesr) 也无法读取到任何东西。

1

一种更符合Python风格的方法是这样的:

search = raw_input().lower().capitalize()
with open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt") as datafile:
    for line in datafile:
        if search in line:
            print line
            break
    else:
        print 'Line not found'
  1. with 来打开文件,这样文件会自动关闭。
  2. 不要把整个文件的内容都读到内存里。只需逐行读取即可。
  3. in 来查找文本。

撰写回答