2016-06-21 198 views
-2

我在这个问题上遇到了一些麻烦。我是Python的初学者,一直在寻找这个网站,但似乎无法弄清楚如何解决这个问题。如果我有一个看起来是这样的文件:如何从文件读取整数,然后在该文件中的整数(Python)之后读取多行?

3 
Alpha 
Beta 
Gamma 
4 
Delta 
Epsilon 
Omega 
Zeta 

我想读的是第一个整数(在这种情况下,3,但它可能会发生变化),并打印出来,然后阅读接下来的三线(阿尔法, 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 

我会把这一个while循环遍历整个文件,读取(印刷)的整数x,阅读(印刷)的下一个x行,然后读取整数y,读取下一个y行等等。由于我可以处理大文件,因此逐行读取似乎是使用f.readline()的方式,因此在读取第一个整数和数字后面,我应该阅读下一个。

任何帮助将不胜感激。谢谢!

编辑:

我想从有我的数据(3α+β伽玛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]); 

我也只是做散热片。 readline()并逐行阅读。

+4

我发现一个规律:要打印*每一行*。为什么不只是'输入input_data:print line','? – zondo

+1

要测试一个字符串是否是整数,请使用'line.isdigit()'。 – cdarke

+0

尽管我想最终打印每一行。基本上,我想打印第一个块(3,Alpha,beta,Gamma)并将其放在一个文件中,然后打印第二个块(4,Delta等)并将其放入文件等中。 – user6496380

回答

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 
+0

嗨,谢谢你的回复!基本上我的目标是打印: Alpha Beta Gamma。 然后,我会写这篇文章到一个文件中,然后继续前进,打印: 三角洲 等 所以我想打印数量以及在每一行的顶部,但我想保留这些全部分开/在单独的文件中。 – user6496380

+0

@ user6496380你应该发布你已经尝试过,所以我可以帮助你指导 –

+0

嗨,我刚刚编辑显示我的意思是从一个文件读取,采取具体的行,并写入到另一个文件。谢谢! – user6496380

-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”等。您可以使用int,并在每次lineIsANumber为true时递增。您需要在主循环中追踪这一点,即顶层的while True

如果你试试这个,卡住我能帮助进一步

相关问题