Python 一次读取8行文件

Python 一次读取8行文件,python,Python,您好,我正在尝试用Python一次读取8行文件,并使用当前的8行作为str变量 然而,我无法正确地做到这一点,并将感谢任何帮助 with open("test.txt", 'r') as infile: lines_gen = islice(infile, 8) for lines in lines_gen: firstname = str(lines[0]) lastname = str(lines[1]) email = str

您好,我正在尝试用Python一次读取8行文件,并使用当前的8行作为str变量

然而,我无法正确地做到这一点,并将感谢任何帮助

with open("test.txt", 'r') as infile:
    lines_gen = islice(infile, 8)
    for lines in lines_gen:
        firstname = str(lines[0])
        lastname = str(lines[1])
        email = str(lines[2])

我怎样才能做到这一点

*干杯

如果需要帮助,请参见以下内容:-

with open("test.txt", 'r') as infile:
    lines_gen = infile.readlines()
    for i in range(0, len(lines_gen), 8):
        (firstname, lastname, email, etc1, ..) = lines_gen[i:i+8]
未经测试

这个怎么样:-

with open("test.txt", 'r') as infile:
    lines_gen = infile.readlines()
    for i in range(0, len(lines_gen), 8):
        (firstname, lastname, email, etc1, ..) = lines_gen[i:i+8]

未经测试

使用itertools.islice的简单实现

from itertools import islice
with open("test.txt") as fin:
    try:
        while True:
            data =  islice(fin, 0, 8)

            firstname = next(data)
            lastname = next(data)
            email = next(data)
            #.....
    except StopIteration:
        pass
一个更好更具pythonic的实现

>>> from collections import namedtuple
>>> from itertools import islice
>>> records = namedtuple('record',
                  ('firstname','lastname','email' #, .....
               ))
>>> with open("test.txt") as fin:
    try:
        while True:
            data =  islice(fin, 0, 3)

            data = record(*data)
            print data.firstname, data.lastname, data.email #.......
    except (StopIteration, TypeError):
        pass

使用itertools.islice的简单实现

from itertools import islice
with open("test.txt") as fin:
    try:
        while True:
            data =  islice(fin, 0, 8)

            firstname = next(data)
            lastname = next(data)
            email = next(data)
            #.....
    except StopIteration:
        pass
一个更好更具pythonic的实现

>>> from collections import namedtuple
>>> from itertools import islice
>>> records = namedtuple('record',
                  ('firstname','lastname','email' #, .....
               ))
>>> with open("test.txt") as fin:
    try:
        while True:
            data =  islice(fin, 0, 3)

            data = record(*data)
            print data.firstname, data.lastname, data.email #.......
    except (StopIteration, TypeError):
        pass

在一个时间模式中使用通常的n个事物

from itertools import izip

with open("test.txt") as f:
    line_gen = izip(*[f]*8)
    for lines in line_gen:
        print lines
        firstname, lastname, email, fourth, fifth, sixth, seventh, eighth = lines
        ...

在一个时间模式中使用通常的n个事物

from itertools import izip

with open("test.txt") as f:
    line_gen = izip(*[f]*8)
    for lines in line_gen:
        print lines
        firstname, lastname, email, fourth, fifth, sixth, seventh, eighth = lines
        ...
试试这个:

every_eight = []
lines = open('test.txt').readlines()
j = 0
for n in range(0, len(lines) +1, 8):
    every_eight.append(''.join([lines[l] for l in range(j, n)]))
    j = n
顺便说一句,如果你想接受大量的人或事物的输入,你可以试着在如下列表中使用词汇:

info = []

every_eight = []
lines = open('test.txt').readlines()
j = 0
for n in range(0, len(lines) +1, 8):
    every_eight.append([lines[l] for l in range(j, n)])
    j = n

for setinf in every_eight:
    if len(setinf) == 8:
        info.append({
                'firstname': setinf[0],
                'lastname' : setinf[1],
                'email'    : setinf[2],
            })

for inf in info:
    print inf
试试这个:

every_eight = []
lines = open('test.txt').readlines()
j = 0
for n in range(0, len(lines) +1, 8):
    every_eight.append(''.join([lines[l] for l in range(j, n)]))
    j = n
顺便说一句,如果你想接受大量的人或事物的输入,你可以试着在如下列表中使用词汇:

info = []

every_eight = []
lines = open('test.txt').readlines()
j = 0
for n in range(0, len(lines) +1, 8):
    every_eight.append([lines[l] for l in range(j, n)])
    j = n

for setinf in every_eight:
    if len(setinf) == 8:
        info.append({
                'firstname': setinf[0],
                'lastname' : setinf[1],
                'email'    : setinf[2],
            })

for inf in info:
    print inf


test.txt
的内容是什么?您得到的错误是什么?可能重复
test.txt
的内容?您得到的错误是什么?迭代器上可能重复的
len()
<代码>len(lines\u gen)。是的,我的错。更新。Thanx.仍然错误,变量
将引发
名称错误
。而
islice()
基于此的解决方案比使用
readlines()
将整个文件加载到内存中更好。好的,这似乎解决了将行[I:I+8]更改为行[I:I+8]后我需要的问题。gen[I:I+8]不知道这是否准确,但似乎有效ty@AshwiniChaudhary谢谢再次更新。
len()
在迭代器上<代码>len(lines\u gen)。是的,我的错。更新。Thanx.仍然错误,变量
将引发
名称错误
。而
islice()
基于此的解决方案比使用
readlines()
将整个文件加载到内存中更好。好的,这似乎解决了将行[I:I+8]更改为行[I:I+8]后我需要的问题。gen[I:I+8]不知道这是否准确,但似乎有效ty@AshwiniChaudhary谢谢再次更新。这将导致无限循环。@AshwiniChaudhary:您能想出一种可能导致此代码段处于无限循环的方案吗?我的错,这是一个缩进问题,这就是为什么我得到不同的输出+1@AshwiniChaudhary:我已经发布了一个更好的Pythonic解决方案,使用namedtuple
firstname,lastname,email,.=[next(data)for uuuuu in range(8)]
在这里也可以正常工作。这将导致无限循环。@AshwiniChaudhary:你能想出一种可能导致此代码段处于无限循环的方案吗?我的错,这是一个缩进问题,这就是为什么我得到了不同的输出+1@AshwiniChaudhary:我已经发布了一个更好的Pythonic解决方案,使用namedtuple
firstname、lastname、email等。=[next(data)for uuuuu in range(8)]
在这里也可以正常工作。