毎回新しい行のファイルに文字列を書き込む


259

を呼び出すたびに文字列に改行を追加したいfile.write()。Pythonでこれを行う最も簡単な方法は何ですか?

回答:


294

「\ n」を使用:

file.write("My String\n")

参考としてPythonマニュアルを参照してください。


3
変数を使用してレコードを作成する場合は、fileLog.write(var1 + var2 + "\ n")のように、末尾に+ "\ n"を追加できます。
フィリップ

4
Pythonの新しいバージョン(3.6以降)では、あなたはまた、単にF-文字列を使用することができますfile.write(f"{var1}\n")
halfdan

109

これは、次の2つの方法で実行できます。

f.write("text to write\n")

または、Pythonのバージョン(2または3)に応じて:

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x

私はf.writelines(str(x))を使用してファイルに書き込みます。ここでxはリストです。リストxをファイルに書き込む方法を伝えるために、各リストを新しい行から始めます
kaushik

2
@kaushik:f.write( '\ n'.join(x))またはf.writelines(i +' \ n 'for i in x)
Steven

私はf.write方法は、それは、Python 2と3の両方で使用することができるよう、より良いと思い
ダンManhチュオン


25

それを広範囲に使用する場合(多数の書き込まれた行)、「ファイル」をサブクラス化できます。

class cfile(file):
    #subclass file to have a more convienient use of writeline
    def __init__(self, name, mode = 'r'):
        self = file.__init__(self, name, mode)

    def wl(self, string):
        self.writelines(string + '\n')

今、それはあなたが望むことをする追加の関数wlを提供します:

fid = cfile('filename.txt', 'w')
fid.wl('appends newline charachter')
fid.wl('is written on a new line')
fid.close()

たぶん、異なる改行文字(\ n、\ r、...)のようなものが足りない、または最後の行も改行で終了しているのですが、それは私にとってはうまくいきます。


1
あなたはする必要はありませんreturn Noneまず、あなたは、二すべてのPythonの関数が返すそれを必要としないため、この場合にはNone何も存在しない場合に、デフォルトではreturn声明。
アンナ

10

あなたができる:

file.write(your_string + '\n')

別の回答で示唆されているように、file.write2回呼び出すことができるときに文字列連結(遅い、エラーが発生しやすい)を使用する理由:

file.write(your_string)
file.write("\n")

書き込みはバッファリングされるため、同じ結果になることに注意してください。


6
file_path = "/path/to/yourfile.txt"
with open(file_path, 'a') as file:
    file.write("This will be added to the next line\n")

または

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")

4
「w」の代わりに「a」をパラメータとして使用してファイルを開いても、関数への書き込みが、説明したとおりに機能するようには変更されません。唯一の効果は、ファイルが上書きされず、テキストが空白のファイルの左上から始まるのではなく、一番下の行に追加されることです。
デモシディスト2018年

2

ただのメモfileです。ではサポートされておらず、Python 3削除されました。open組み込み関数でも同じことができます。

f = open('test.txt', 'w')
f.write('test\n')

2

バイナリファイルに書き込む場合を除き、printを使用します。以下の例は、csvファイルのフォーマットに適しています。

def write_row(file_, *columns):
    print(*columns, sep='\t', end='\n', file=file_)

使用法:

PHI = 45
with open('file.csv', 'a+') as f:
    write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
    write_row(f)  # newline
    write_row(f, data[0], data[1])

ノート:


2

fstringを使用してリストから書き込む別のソリューション

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')

1

これは、区切り文字として\ nを体系的に生成するために、この問題を自分で解決しようと思いついた解決策です。各文字列がファイルの1行である文字列のリストを使用して書き込みますが、同様に機能するようです。(Python 3. +)

#Takes a list of strings and prints it to a file.
def writeFile(file, strList):
    line = 0
    lines = []
    while line < len(strList):
        lines.append(cheekyNew(line) + strList[line])
        line += 1
    file = open(file, "w")
    file.writelines(lines)
    file.close()

#Returns "\n" if the int entered isn't zero, otherwise "".
def cheekyNew(line):
    if line != 0:
        return "\n"
    return ""

なぜ単純ではないのですwith open(path, "w") as file: for line in strList: file.write(line + "\n")か?このようにして、すべてのリスト作業とチェックを削除し、3行だけにすることができます。
ギモート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.