1. ホーム
  2. python

[解決済み】改行がないファイルを読み込むには?

2022-01-31 02:22:54

質問内容

Pythonで

temp = open(filename,'r').readlines()

は、各要素がファイルの1行であるリストとなります。ちょっとバカっぽいですが、それでも readlines() というのは、各要素に改行文字を書き込んでしまうからです。

どうすれば回避できるのでしょうか?

解決方法は?

ファイル全体を読み、行を分割することができます。 str.splitlines :

temp = file.read().splitlines()

または、手で改行を取り除くこともできます。

temp = [line[:-1] for line in file]

この最後の解決策は、ファイルが改行で終わっている場合のみ有効で、そうでない場合は最終行で1文字が失われます。

この仮定はほとんどの場合において正しい(特にテキストエディタで作成されたファイルでは、しばしば する を追加します)。

これを避けたい場合は、ファイルの末尾に改行を追加します。

with open(the_file, 'r+') as f:
    f.seek(-1, 2)  # go at the end of the file
    if f.read(1) != '\n':
        # add missing newline if not already present
        f.write('\n')
        f.flush()
        f.seek(0)
    lines = [line[:-1] for line in f]

あるいは、よりシンプルな代替案として strip の代わりに改行します。

[line.rstrip('\n') for line in file]

あるいは、かなり読めないが、偶数。

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

の戻り値であることを利用したものです。 or はブール値ではなく、true または false と評価されたオブジェクトです。


readlines というメソッドは、実は同等なのです。

def readlines(self):
    lines = []
    for line in iter(self.readline, ''):
        lines.append(line)
    return lines

# or equivalently

def readlines(self):
    lines = []
    while True:
        line = self.readline()
        if not line:
            break
        lines.append(line)
    return lines

以降 readline() は改行も維持します。 readlines() を保持します。

との対称性を保つために readlines() writelines() メソッドは ない は末尾に改行を追加するので f2.writelines(f.readlines()) の完全なコピーを生成します。 ff2 .