如何在python中获取文本文件的特定行?

如何在python中获取文本文件的特定行?,python,Python,我现在对文本文件有两个问题: a) 首先:我有一个文本文件(它是一个日志),这个日志有许多行:2221。我只想从2211行打印到2220行。我该怎么做 我有以下代码: line_number=2011 with open('file.log') as f: i = 2011 for line in f: if i == line_number: break i += 1

我现在对文本文件有两个问题:

a) 首先:我有一个文本文件(它是一个日志),这个日志有许多行:2221。我只想从2211行打印到2220行。我该怎么做

我有以下代码:

line_number=2011
with open('file.log') as f:
        i = 2011
        for line in f:
            if i == line_number:
                break
            i += 1
            print (line)
但是打印所有文件

b) 第二:行2211到2220是这样的:

多米尼克1.BL0000001.pdb 24.69530

Dominio1.BL00020001.pdb 14.33748

Dominio1.BL00030001.pdb 30.53454

Dominio1.BL00040001.pdb 23.82516

多米尼克1.BL00050001.pdb 27.48684

多米尼克1.BL00060001.pdb 18.17364

Dominio1.BL00070001.pdb 30.98407

多米尼克1.BL00080001.pdb 17.19927

Dominio1.BL00090001.pdb 19.02460

Dominio1.BL00100001.pdb 22.57086

我想创建一个代码,用于选择具有最小数字的数字行(标识),并读取.pdb的名称(只有具有最小数字的行的24个字符)。因为,我需要标识具有最小数字的.pdb是什么,并将其像其他脚本中的字符串一样使用,如下所示:

型号='%s'%R

其中“%s”%R是我需要的.pdb的名称


我该怎么做?

当您到达感兴趣的行时,您的代码只会中断,但您没有与打印相关的条件,因此它会打印遇到的每一行。如果您将代码更改为以下内容:

start = 2011
end = 2220

with open('file.log') as f:
    for line_number, line in enumerate(f):
        if line_number > end:
            break
        if line_number > start:
            print line
您可以将文件句柄视为列表并对其进行切片:

with open('file.log') as f:
    print "".join(list(f)[2011:2220])
A:

with open('file.log') as f:
    print f.read().split('\n')[2211:2220+1] 
def s(item):
    return item[num_of_spaces:]
num_of_spaces = len("Dominio1.BL00010001.pdb         ")
with open('file.log') as f:
    lines = f.read().split('\n')[2211:2221]
print sorted(lines, key=s)[0]
首先,创建文本文件中所有行的列表(行由新行字符(“\n”)分隔),然后对列表进行切片,非常简单

编辑:如果不介意结尾处的“\n”,也可以使用bulit in函数“readlines”:

with open('file.log') as f:
    print f.readlines()[2211:2220+1]
B:

with open('file.log') as f:
    print f.read().split('\n')[2211:2220+1] 
def s(item):
    return item[num_of_spaces:]
num_of_spaces = len("Dominio1.BL00010001.pdb         ")
with open('file.log') as f:
    lines = f.read().split('\n')[2211:2221]
print sorted(lines, key=s)[0]
这应该行得通

with open('file.log') as f:
        rd=f.readlines()
        print (rd[2211:2221])

readlines()
返回一个列表,因此只需使用索引对列表进行切片。从
0开始的索引不算最后一个数字,因此您必须写入2220+1。

您的代码段的问题是,您总是打印您读取的行,直到到达所需行,然后中断循环!请尝试此操作

line_number=2011
with open('file.log') as opened_file:
     for i, line in enumerate(opened_file):
         # Only print it if you got to the desired line or upper
         if i >= line_number:
             print(line)
但是,有更好的方法来解决这个问题,特别是在处理大文件时

如果你想取这个名字,我建议把这行分开,你可以写:

columns = line.split()
print('File name is', columns[0])

因此,对于每一行
['Dominio1.BL00010001.pdb','24.69530',您都会得到这样的列表

的可能重复项是否要对数字14.33748、24.69530等进行排序?是的,我需要这样做的代码:1。-选择具有最小数字的行2。-仅读取具有结尾的名称。pdb原因,我想将name.pdb用作字符串,并指示此pdb现在在我的其他脚本中使用。