我现在有两个问题:文本文件:
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行是:
Dominio1.BL00010001.pdb 24.69530
Dominio1.BL00020001.pdb 14.33748
Dominio1.BL00030001.pdb 30.53454
Dominio1.BL00040001.pdb 23.82516
Dominio1.BL00050001.pdb 27.48684
Dominio1.BL00060001.pdb 18.17364
Dominio1.BL00070001.pdb 30.98407
Dominio1.BL00080001.pdb 17.19927
Dominio1.BL00090001.pdb 19.02460
Dominio1.BL00100001.pdb 22.57086
我想创建一个代码,用于选择编号最小的数字行(标识),并读取.pdb的名称(只有编号最小的行的24个字符)。因此,我需要识别具有最小编号的.pdb是什么,并在其他脚本中像字符串一样使用它,如下所示:
模型= '%s' 的%R
其中'%s'%R是我需要的.pdb名称
我该怎么做?
答案 0 :(得分:1)
当您到达感兴趣的线条时,您的代码只会中断,但您没有与打印相关联的条件,因此它会打印它遇到的每一行。如果您将代码更改为:
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])
答案 1 :(得分:1)
答强>
with open('file.log') as f:
print f.read().split('\n')[2211:2220+1]
首先创建文本文件中所有行的列表(行由新行字符(“\ n”)分隔,然后对列表进行切片,就像那样。
编辑:或者你可以使用bulit-in函数“readlines”如果你不介意最后的'\ n':
with open('file.log') as f:
print f.readlines()[2211:2220+1]
<强> B:强>
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]
这应该有效
答案 2 :(得分:0)
with open('file.log') as f:
rd=f.readlines()
print (rd[2211:2221])
readlines()
返回一个列表,所以只需用索引对列表进行切片。从0
开始的索引和最后一个数字不算,所以你必须写2220 + 1.
答案 3 :(得分:0)
你的代码片段的问题是你总是打印你读到的行,直到你到达所需的行,然后你打破了循环!试试这个
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)
但是,有更好的解决此问题的方法,特别是如果您正在处理大型文件。看看this question。
如果你想取名字我建议分割线,你可以写:
columns = line.split()
print('File name is', columns[0])
因此,每个行['Dominio1.BL00010001.pdb', '24.69530']
都会得到这样的列表。