我有一个文件,其文件名为新行,然后是文件的哈希值,然后是换行符。这种模式重复。例如:
blah.txt
23847EABF8742
file2.txt
1982834E387FA
我有一个名为'information'的类,它有两个成员变量。
class information:
filename=''
hashvalue=''
现在我想读入文件并将文件名和hashvalue存储在'information'对象的新实例中,然后将信息对象的实例推送到列表中。
我遇到的问题是迭代文件来读取它。我想逐行阅读,直到文件结束。 python的'for line in file'方法的问题在于它每次都会抓取一行,我将被迫做某种其他的策略来将数据放入正确的成员变量。
相反,这就是我想要做的......
list=[]
while(not end of file)
x = information()
x.filename = file.readline()
x.hashvalue = file.readline()
list.append(x)
答案 0 :(得分:2)
你可以写一个生成器函数:
def twolines(file):
cur = None
for i in file:
if cur is None:
cur = i
else:
yield (cur, i)
cur = None
然后将您的文件对象传递给twolines()
,并执行类似
for i, j in twolines(file):
x = information()
x.filename, x.hashvalue = i,j
list.append(x)
答案 1 :(得分:1)
while True:
x = information()
x.filename = file.readline()
if not x.filename:
break
x.hashvalue = file.readline()
my_list.append(x)
可能?
或
while True:
x = information()
try:
x.filename = next(file)
x.hashvalue = next(file)
except StopIterationError:
break
my_list.append(x)
或我最喜欢的
my_list = [filename,hashvalue for filename,hashvalue in zip(file,file)]
答案 2 :(得分:0)
这个怎么样:
list = [information(filename=x.rstrip(), hashvalue=next(it).rstrip()) for x in file]
答案 3 :(得分:0)
另一个简单的解决方法是计算线条。为此引入类似line = 0
的变量。现在你可以尝试以下方法:
for lines in file:
line = line + 1
if line % 2 == 1:
# This will be the filename
else:
# This will be the hashcode