在Python2.6中,如何处理特定行之后的数据?
我有一个脚本,基本上读取一个文本文件并创建8个列表。如果它从第1行读取文件,则工作正常。我需要它开始从第177行到第352行(即最后一行)读取文本文件 这是我的脚本和更改。我没有得到任何错误,但也没有任何结果。程序挂在那里没有响应:在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
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:
。太棒了!它起作用了!我想接受你的回答,但我得等一会儿。谢谢