2016-06-21 72 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

如果你試試這個,卡住我能幫助進一步