在Python2.6中,如何处理特定行之后的数据?

在Python2.6中,如何处理特定行之后的数据?,python,Python,我有一个脚本,基本上读取一个文本文件并创建8个列表。如果它从第1行读取文件,则工作正常。我需要它开始从第177行到第352行(即最后一行)读取文本文件 这是我的脚本和更改。我没有得到任何错误,但也没有任何结果。程序挂在那里没有响应: f = open("Output1.txt", "r") lines = [line.rstrip() for line in f if line != "\n"] #Get all lines, strip newline chars, and remove l

我有一个脚本,基本上读取一个文本文件并创建8个列表。如果它从第1行读取文件,则工作正常。我需要它开始从第177行到第352行(即最后一行)读取文本文件

这是我的脚本和更改。我没有得到任何错误,但也没有任何结果。程序挂在那里没有响应:

f = open("Output1.txt", "r")

lines = [line.rstrip() for line in f if line != "\n"] #Get all lines, strip
newline chars, and remove lines that are just newlines.


NUM_LISTS = 8

groups = [[] for i in range(NUM_LISTS)]



listIndex = 0


for line in lines:


    while line > 177: #here is the problem


        if "Transactions/Sec for Group" not in line:
            groups[listIndex].append(float(line))
            listIndex += 1
            if listIndex == NUM_LISTS:
                listIndex = 0
                value0 = groups[0]
                value1 = groups[1]
                value2 = groups[2]
                value3 = groups[3]
                value4 = groups[4]
                value5 = groups[5]
                value6 = groups[6]
                value7 = groups[7]



json_file = 'json_global.json'

json_data = open(json_file)

data = json.load(json_data)

for var1 in range(0, 11):

    a = value0[var1]
    b = value1[var1]
    c = value2[var1]
    d = value3[var1]
    e = value4[var1]
    f = value5[var1]
    g = value6[var1]
    h = value7[var1]

    var2 = var1 + 57

    item = data[var2]['item']

    cmd = data[var2]['command']


    var1+= 1

    print item, cmd,  a, b, c, d, e, f, g, h)

包含每行的内容,而不是行号。即使它这样做了,这也会失败,因为您会跳过循环,因为第一行的数字不大于177。这里有一种方法可以满足您的需求:

for linenumber, line in enumerate(lines, 1):
    if linenumber > 177:
        do_stuff(line)
enumerate()
获取一个iterable并返回一个
(索引,项)
元组的iterable。
1
参数告诉它从哪个索引开始;它默认为
0
。如果linenumber>177:中的数字与您想做的事情一致,请调整该数字

另一种方法是使用
itertools.islice()
,如中所述。下面是一个使用
islice()
的版本,它不会事先将整个文件读入内存:

from itertools import islice

with open('Output1.txt', 'r') as f:
    lines = (line.rstrip() for line in f if line != '\n')
    for line in islice(lines, 177, None):
        do_stuff(line)
这将有效地分割行,就像您已经完成了行[177:](这是另一个解决方案)


请注意,您没有包括仅为换行符的行,因此文件中的第177行与程序中的第177行不同。

问题在于,
是中的行列表,因此当您这样做时-

for line in lines:
是一个字符串,而不是该行的索引,因此下一个while循环为true,因此它应该进入无限循环,因为while循环中从不更改
,并且条件始终为true

我建议您不要这样做,而是使用,从第177行迭代到最后。范例-

import itertools
for line in itertools.islice(lines,177,None):
    if "Transactions/Sec for Group" not in line:
        groups[listIndex].append(float(line))
        listIndex += 1
        if listIndex == NUM_LISTS:
            listIndex = 0
            value0 = groups[0]
            value1 = groups[1]
            value2 = groups[2]
            value3 = groups[3]
            value4 = groups[4]
            value5 = groups[5]
            value6 = groups[6]
            value7 = groups[7]

谢谢@kittykittybangbangsed-n'177352p'| python脚本名不客气,@Gusbok.:)@密码?我是否应该将:替换为:对于line-in-line:@Gusbok,是的,将
替换为line-in-line:while-line>177:
替换为
对于linenumber,line-in-enumerate(line,1):如果linenumber>177:
。太棒了!它起作用了!我想接受你的回答,但我得等一会儿。谢谢