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

时间:2014-08-05 05:17:25

标签: python

我想根据用户输入打印出特定的文本行。到目前为止,我有这个:

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 :(得分:1)

更多 pythonic 方法就是:

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
  4. 查找文字

答案 1 :(得分:0)

首先,不要将list用作变量名。你正在隐藏内置函数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"

答案 2 :(得分:0)

第一个问题:x.lower()x.capitalize() 不会更改字符串。没有办法在Python中更改字符串。您只能创建新字符串。 x.lower()x.capitalize()创建新字符串。如果您希望x成为新字符串的名称,则需要自己执行此操作:

x = x.lower().capitalize()

第二个问题:在使用listo = list.read()读取整个文件后,您就在文件的末尾。尝试再次读取该文件将不再读取,因此defines = list.readlines(linesr)无法读取任何内容。

答案 3 :(得分:0)

       listo = list.read()

。执行此操作后,指向文件的列表指针到达文件末尾。所以

       list.readlines() 
除非你做

,否则

将再次无效

       list.seek(0)

再次将指针指向文件的开头。

答案 4 :(得分: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

答案 5 :(得分:0)

这是一种实现您所需要的简单方法(假设您想要打印所有以您提供的sting作为输入的行):

datalist = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt")
listo = datalist.readlines()
nlines = 0
x = raw_input()
x = x.lower()
x = x.capitalize()
for y in list0:
    if y.startswith(x):
       print y

以下是您应该记住的一些小事:

  1. 不要将列表设置为变量名称,因为它是内置函数

  2. x.lower()x.capitalize()不会更改x。它只返回字符串的修改版本。为了重新使用修改后的字符串,将其设置为变量然后使用它。

  3. list.readlines(linesr)给出了必须从文件中读取的字节数,而不是索引换行符中的行

答案 6 :(得分:0)

list = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt")
listo = list.read()
lines = listo.split("\n")
nlines = 0
x = raw_input()
x.lower()
x.capitalize()
if len(lines)>int(x):
    defines = lines[int(x)-1]
    print x
    print defines
else:
    print "Nope!"

试试这段代码。

首先,它将打印您从shell输入的行号

之后

将打印文件的指定行。(例如,如果x为3,则将打印文档的第3行

答案 7 :(得分:0)

切勿将built_in_函数名称用作变量名称。

file_1 = open("/Users/nicejojo12/Desktop/Python/DictionaryDefinitions.txt.txt")
listo = file_1.readlines()
line_number = raw_input()
for lines in range(len(listo)):
    if int(line_number) == lines:
        print listo[lines]
    else:
        print "enter a line number between 1 to ", len(listo)
        break

如果您希望行号为user_input,则会从文件中获取相应的行。