如何在python中获取文本文件的特定行?
我现在对文本文件有两个问题: a) 首先:我有一个文本文件(它是一个日志),这个日志有许多行:2221。我只想从2211行打印到2220行。我该怎么做 我有以下代码:如何在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
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现在在我的其他脚本中使用。