手动读取python中的行

时间:2015-02-20 22:40:37

标签: python file input

我有一个文件,其文件名为新行,然后是文件的哈希值,然后是换行符。这种模式重复。例如:

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)

4 个答案:

答案 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