如何从文本文件中打印特定行?
我想根据用户输入的内容,打印出特定的一行文字。目前我有了这个:
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'
- 用
with
来打开文件,这样文件会自动关闭。 - 不要把整个文件的内容都读到内存里。只需逐行读取即可。
- 用
in
来查找文本。