如何读取文件中的整数,然后在该文件(Python)中的整数之后读取那么多行?

时间:2016-06-21 22:08:17

标签: python file loops

我在解决这个问题时遇到了麻烦。我是Python的初学者,一直在搜索这个网站,但似乎无法弄清楚如何解决这个问题。如果我有一个看起来像这样的文件:

3
Alpha
Beta
Gamma
4
Delta
Epsilon
Omega
Zeta

我想读取第一个整数(在这种情况下,3但它可能会有所不同)并打印出来,然后读取接下来的三行(Alpha,Beta,Gamma)并打印出来。之后,我想读取下一个整数(在本例中为4)然后读取接下来的四行(Delta,Epsilon,Omega,Zeta)并打印出来。

我想我已经弄清楚如果修正了这个整数怎么做,但我不知道怎么做,如果那个整数是一个变量,可能是什么。如果整数是固定的,这就是我所拥有的:

with open('myfile.txt') as input_data:
    for line in input_data:
        if line.strip() == '3':  
            print "3"
            break
# Reads text until the end of the block:
    for line in input_data:  # This keeps reading the file
        if line.strip() == '3':
            break
        print line

我会把它放在一个循环遍历整个文件,读取(和打印)整数x,读取(和打印)下一个x行,然后读取整数y,读取下一个y行等的while循环中。因为我可以处理大文件,所以看起来逐行读取是f.readline()的方法,所以在我读完第一个整数和数字后,我应该读下一个。

任何帮助都会受到很多赞赏。谢谢!

编辑:

我想读取包含我的数据的文件(3 Alpha Beta Gamma 4等)。然后我将读取3(或任何整数),然后发出信号以读取Alpha Beta Gamma。然后我会将其写入文件。然后,我会读4(或任何整数),然后发信号读取Delta Epsilon Omega Zeta。我会像这样浏览文件的其余部分。

我对各个部分有所了解,所以在从文件" myfile.txt"中读取后,我会将此输出写入" output.txt":

with open('myfile.txt', 'r') as fin:
alllines = fin.readlines();
with open('output.txt', 'w') as fout:
    for i in range(len(alllines)):
            fout.write(alllines[i]);

我也可以做fin.readline()并逐行阅读。

2 个答案:

答案 0 :(得分:1)

如果您的目标是读取格式完美的文件,使第一行为数字N,则第一行后面的N行是要打印的单词,之后的行是数字M,下一行是M行是您要打印(以及打开和打开)的行,然后以下内容将起作用:

with open('myfile.txt') as input_data:
    lines_to_print = int(input_data.readline().strip())
        for x in xrange(lines_to_print):  
            print input_data.readline()

这仅适用于您提出的假设案例。

这将打印:

Alpha
Beta
Gamma
Delta
Epsilon
Omega
Zeta

虽然,如果你的目标是打印不是数字的所有,那么你也可以这样做:

with open('myfile.txt') as input_data:
    for line in input_data:
        if not line.isdigit():
            print line

答案 1 :(得分:-1)

我不想编辑我的原始答案,所以这里是一个新答案。

第一步是逐行打开并阅读文件:

with open('myfile.txt') as input_data:
    while True:
        line = input_data.readline()
        print line
        if not line:
            break
        ## this is where you do stuff, like file writing and whatnot
如果没有更多行,

if not line:将退出循环。在上面的“执行内容”部分中,首先要检查它是否为数字:

        ## lineIsANumber = (check if "line" is a number)

如果是数字,则启动另一个循环

        if lineIsANumber:
            for x in xrange(number_read_from_file):
                ## read next line
                ## print line
                ## write to a file

棘手的部分是每次都写入不同的文件。您可以做的一件事是将文件命名为“1”“2”等...以获取它们创建的顺序。每次lineIsANumber为true时,您都可以使用int并递增它。您需要在主循环中跟踪这一点,while True位于顶层。

如果你尝试这个并且卡住我可以帮助进一步