簡體   English   中英

Python從文件打印行

[英]Python printing lines from a file

稱呼,我試圖寫一個函數,逐行打印文本文件中的數據。 輸出需要具有行號,后跟冒號和空格。 我想出了以下代碼;

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number)+": "+line, end=' ')
        line_number += 1

問題是,當我使用創建的測試文本文件運行此功能時,第一行與輸出中的其余各行不在同一縮進級別。 輸出看起來像是1: 9874234,12.5,23.0,50.0 2: 7840231,70,60,85.4 3: 3845913,55.5,60.5,80.0 4: 3849511,20,60,50我哪里出錯了? 謝謝

end參數的值替換為空字符串而不是空格。 由於end參數是一個空格,因此它將在每行之后打印一個空格。 因此后面的行在行的開頭有一個空格。

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number) + ": " + line, end='')
        line_number += 1

執行此操作的另一種方法是strip新行並打印,而無需將任何值傳遞給end參數。 這將刪除\\n它具有在所述線的端部和一個新的線將被打印為end="\\n"默認。

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number) + ": " + line.strip("\n"))
        line_number += 1

您將end參數指定為空格。 因此,在第一行之后,每個都有額外的空間。

您從文件中讀取的行看起來像這樣:

'9874234,12.5,23.0,50.0\n'

看結尾。 發生行翻譯是由於原始行。

因此,要獲得所需的內容,只需將print的end參數更改為空字符串(而不是空格)

此外,我建議您更改該功能的實現,並將enumerate用於行編號。

def print_numbered_lines(filename):
    data = open(filename)
    for i, line in enumerate(data):
        print(str(i+1)+": "+line, end='')

這與您的打印語句有關。

print(str(line_number)+": "+line, end=' ')

您可能已經看到,在打印行時,它們之間有多余的一行,然后您嘗試使用end=' '解決此問題。

如果要刪除“空”行,則應使用line.strip() 這將刪除它們。

用這個:

print(str(line_number)+": "+line.strip())

脫衣舞娘也可以爭論。 這來自文檔:

str.strip( [炭]

返回刪除前導和尾隨字符的字符串的副本。 chars參數是一個字符串,指定要刪除的字符集。 如果省略或為None,則chars參數默認為刪除空白 chars參數不是前綴或后綴; 而是刪除其值的所有組合:

那是怎么回事?

文件中的行不會被分隔成不同的行。 在Linux上,換行符用\\n表示。 普通編輯器通過將文本下推到新行來轉換它們。

讀取文件時,Python會將這些\\n精確地分隔開,但不會將其丟棄。 打印時,它們將被重新解釋並與換行符結合使用,然后print將增加一個換行符“太多”。

end在你的打印語句的參數只是改變什么print打印線后會用。 默認值為\\n

檢查使用end=" !"

1: aaa
 !2: bbb
 !3: ccc

您會在\\n aaa引起換行符之后看到\\n ,該換行符是字符串的一部分,並且在打印后添加end的內容。 因此它增加了一個! 下一行打印在同一行中,因為在打印之前沒有其他換行符會導致換行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM