540

Pythonでは、

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

結果は、各要素がファイル内の行であるリストになります。それは少しばかげていますが、それでも:readlines()各要素に改行文字を書き込みます。これは私が起こりたくないことです。

どうすればそれを回避できますか?

4

10 に答える 10

788

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

temp = file.read().splitlines()

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

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

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

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

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

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()のために、終了改行は追加されないため、 inの正確なコピーが生成されます。writelines()f2.writelines(f.readlines())ff2

于 2012-09-08T11:57:07.220 に答える
66
temp = open(filename,'r').read().splitlines()
于 2012-09-08T11:57:56.690 に答える
28

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

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

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

于 2018-09-28T15:04:31.670 に答える
15

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

temp = [line.strip() for line in file.readlines()]
于 2019-02-01T12:18:08.883 に答える
12
temp = open(filename,'r').read().splitlines()
于 2017-08-17T02:01:22.773 に答える
1

これを試して:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  
于 2018-02-05T04:23:56.177 に答える
0

/n末尾の行末( )文字と空のリスト値( )を取り除くには、次のことを''試してください。

f = open(path_sample, "r")
lines = [line for line in f.readlines() if line.strip() != '']
于 2021-05-30T09:30:42.683 に答える
0

このスクリプトは、ファイルから行を取得し file2の最後に改行がないすべての行を保存します。

file = open("temp.txt", "+r")
file2 = open("res.txt", "+w")
for line in file:
    file2.writelines(f"{line.splitlines()[0]},0\n")
file2.close()

を見ると、この値はdata \ nなので、splitlines()

配列として作成し、[0]で単語データのみを選択します

于 2022-02-22T19:52:38.210 に答える
-2
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() 
于 2018-08-12T14:39:12.633 に答える
-4
import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])
于 2016-10-04T12:33:17.593 に答える