2017-10-09 81 views
-3
def main(): 
    file_output=open(r'C:\Users\P\Desktop\randominput.txt','r') 

    for num in file_output: 
     number=file_output.read() 
     print(number) 
main() 

輸出:在txt文件讀取數據

 
48 
85 
58 
16 
11 
82 

實際數據

 
53 
48 
85 
58 
16 
11 
82 

爲什麼我的Python程序不讀的第一個數字?

+1

你爲什麼要遍歷文件,然後在循環中使用'read'?另外,該文件的內容是什麼? – Carcigenicate

+0

txt文件的結構是什麼?是由行分隔的數字? –

+0

是的,他們是由'/ n' – user8163495

回答

0

您的程序讀取第一個數字。當您開始迭代文件對象for num in file_output:時,將讀取文件的第一行,因此num是第一個數字,文件讀取器現在正在查看第二行,正在等待下一次迭代。

然後您可以撥打.read()將其讀入文件末尾。這將爲您提供number中的所有其餘數字,並將讀者移至文件末尾,終止迭代。你想要麼:

for num in file_output: 
    print(num) 

1

用一個簡單的打印追查這是怎麼回事:

for num in file_output: 
    print("num=", num) 
    number=file_output.read() 
    print(number) 

輸出:

num= 53 

48 
85 
58 
16 
11 
82 

注意EFFE ct:num是第一個輸入數字,但它只出現一次。你只經過一次循環。

您的對於循環抓取文件中的第一個數字;循環內的將文件的其餘部分作爲一個輸入。

我建議你查看你正在使用的每個命令的實際功能;你不是相當於清楚的操作呢。


REPAIR

def main(): 
    with open("so.txt") as file_output: 

     for num in file_output: 
      print("num=", num) 
main() 

輸出:

num= 53 

num= 48 

num= 85 

num= 58 

num= 16 

num= 11 

num= 82 

注意,你還在讀這些字符串,完整的換行符。從這裏繼續留給讀者一個練習。 :-)

1

該文件的第一行在for循環的第一次迭代期間被消耗。 read()然後從文件中的當前位置(即第二行的開頭)將文件讀取到文件末尾。

因此,print()一次打印文件的內容,跳過第一行。

要修復代碼:

with open(r'C:\Users\P\Desktop\randominput.txt', 'r') as file_input: 
    for number in file_input: 
     print(number.rstrip()) 

rstrip()有在每行的末尾刪除換行字符。此外,文件在使用with的上下文管理器中打開。這將確保文件在任何情況下都會關閉。

1

它是在打開(r'C:\ Users \ P \ Desktop \ randominput.txt','r')中有'C \ Users \ P ...'之前的一個錯字。 ?那不應該在那裏。

我相信你正試圖從文本文件中打印每一個數字。這裏是你可以這樣做的一種方式:

f = open("C:/Users/u/file.txt") 
file_contents = f.read() 
numbers = str(file_contents).split() 
for x in range (0, len(numbers) - 1): 
    print (str(numbers[x]))