web-dev-qa-db-ja.com

改行なしでファイルを読む

Pythonでは、呼び出し

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

各要素がファイル内の行であるリストが表示されます。ちょっとばかげていますが、それでも:readlines()は各要素に改行文字を書きますが、これは望んでいません。どうすればそれを避けることができますか?

275
Yotam

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

temp = file.read().splitlines()

または、改行を手で削除することもできます。

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

注: この最後の解決策は、ファイルが改行で終わっている場合にのみ機能します。それ以外の場合、最後の行は文字を失います。

この仮定は、ほとんどの場合に当てはまります(特にdoとにかく末尾の改行を追加する)テキストエディタによって作成されたファイルの場合)。

これを避けたい場合は、ファイルの最後に改行を追加することができます。

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() メソッドはnotで終了改行を追加しないので、f2.writelines(f.readlines())f2に正確なfのコピーを生成します。

405
Bakuriu
temp = open(filename,'r').read().split('\n')
29
vivek

もう一つの例:

ファイルを一度に1行ずつ読み込みます。文字列の末尾から不要な文字を削除する str.rstrip(chars)

with open(filename, 'r') as fileobj:
    for row in fileobj:
        print( row.rstrip('\n') )

str.strip([chars])str.lstrip([chars])も参照してください。

(python> = 2.0)

7
O95
temp = open(filename,'r').read().splitlines()
7
Marcel

これが最善の選択肢だと思います。

temp = [line.strip() for line in file.readlines()]
4
Абага

これを試して:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  
1
Nitesh Soni
my_file = open("first_file.txt", "r")
for line in my_file.readlines():
    if line[-1:] == "\n":
        print(line[:-1])
    else:
        print(line)
my_file.close() 
0
Necriss
import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])
0
srus