簡體   English   中英

Python:讀寫文件時的行終止

[英]Python: line termination while reading and writing files

我編寫了一個簡單的實用程序,可以從文件中刪除某些行。 它將文件讀入行列表(Python),並將它們寫為單個串聯字符串,並保留新行; 一些行被刪除,一些在該過程中被注釋; 變化的百分比可以忽略不計。 不知怎的,DIFF送給我一份大紅色塊之前經過一個大的綠色塊。 肉眼可見,生成的文件看起來非常不錯。 我想到了拖尾空間或類似的東西之間的細微差別,但是真的有可能嗎? 如果我在每行中添加了不可見的內容,則每條紅線之后都會有相應的綠線。 還是我聚集。

UPD:

有人告訴我,行尾是確定的。 我的代碼的要點:

def check_file(path):
    out_line = ""
    with open(path, "r") as f_r:
        for line in f_r.readlines():
            drop_it, o_line = consume_line(line)
            if drop_it:
                pass
            else:
                out_line += o_line
    with open(path, "w") as f_w:
        f_w.write(out_line)

consume_line()本質上按原樣返回其參數。 在某些不常見的情況下,可以計划將其丟棄,也可以不進行注釋/注釋。 在任何情況下,都無需手動擺弄行尾。

如果沒有刪除任何行,則沒有編輯器報告行總數的任何變化。 這些文件起源於Linux。

此代碼設置文件中第一個eol之后的所有行尾。 保留尾隨空間。

g_newline = ''


def current_nl(f):
    global g_newline

    if g_newline:
        return g_newline
    g_newline = f.newlines
    if isinstance(g_newline, tuple):
        print('!!! Something wrong. This is supposed to be the first eol in the file\n')
        return '\n'
    return g_newline


def check_file(path):
    global g_newline

    g_newline = ''
    out_line = ""

    with open(path, "r") as f_r:
        for line in f_r.readlines():
            drop_it, o_line = consume_line(line)
            if drop_it:
                pass
            else:
                out_line += o_line.rstrip('\n') + current_nl(f_r)
    with open(path, "w") as f_w:
        f_w.write(out_line)

暫無
暫無

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

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