web-dev-qa-db-ja.com

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

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

196
kaushik

"\ n"を使用してください。

file.write("My String\n")

参考のために Pythonのマニュアル を参照してください。

223
halfdan

これには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
94
Greg Hewgill

あなたが使用することができます:

file.write(your_string + '\n')
62
Krishna K

もしあなたがそれを広範囲に(たくさんの書かれた行)使うならば、 'file'をサブクラス化することができます。

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')
        return None

今それはあなたが欲しいものをする追加の関数wlを提供します:

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

たぶん私は別の改行文字(\ n、\ r、...)のようなものがないか、最後の行も改行で終わっていますが、それは私のために働きます。

18
mathause
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")
5
Panos Kal.

あなたがすることができます:

file.write(your_string + '\n')

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

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

書き込みはバッファリングされるので同じことになります。

ちなみにfilePython 3ではサポートされておらず削除されました。 open組み込み関数でも同じことができます。

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

これは私が体系的に区切り文字として生成するために私自身がこの問題を解決しようとしたときに思いついた解決策です。各文字列がファイルの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 ""
1
democidist

バイナリファイルに書き込まない限り、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])

ノート:

0
Mesco