Bagaimana cara menentukan baris baru pada Python, saat menulis pada file?


314

Dibandingkan dengan Java (dalam string), Anda akan melakukan sesuatu seperti "First Line\r\nSecond Line".

Jadi bagaimana Anda melakukannya dengan Python, untuk tujuan menulis beberapa baris ke file biasa?


12
Apa yang sudah kamu coba? Apa itu bekerja? (Kurasa tidak, atau kamu tidak akan bertanya.) Apa yang terjadi?
Greg Hewgill

Saya hanya ingin tahu apakah ada cara yang benar dan salah untuk melakukannya, saya belum mencobanya.
FabianCook

5
Anda menyadari bahwa Python printberfungsi seperti System.out.printlndi Jawa, dan secara otomatis menambahkan baris baru setelah teks, bukan?
Greg Hewgill

Saya ingin itu untuk menulis file :)
FabianCook

2
The printpernyataan dalam Python juga dapat digunakan untuk menulis ke file (rincian berbeda antara Python 2.x dan Python 3.x, jadi dengan dokumentasi referensi untuk versi Anda). printdalam Python 2.x - printdalam Python 3.x
Greg Hewgill

Jawaban:


357

Itu tergantung pada seberapa benar Anda ingin menjadi. \nbiasanya akan melakukan pekerjaan. Jika Anda benar-benar ingin melakukannya dengan benar, Anda mencari karakter baris baru dalam ospaket . (Sebenarnya disebut linesep.)

Catatan: saat menulis ke file menggunakan API Python, jangan gunakan os.linesep. Cukup gunakan \n; Python secara otomatis menerjemahkannya ke karakter baris baru yang sesuai untuk platform Anda.


14
Dari tautan yang Anda berikan "Jangan gunakan os.linesep sebagai terminator garis saat menulis file dibuka dalam mode teks (default); gunakan satu '\ n' sebagai gantinya, pada semua platform." Jadi apa yang Anda maksud dengan "benar" dan apa alasan mereka dan komentar Anda?
Yasen

21
@Yasen: Di Windows, urutan baris baru adalah "\r\n". Ini artinya os.linesepakan "\r\n". Ketika Anda menulis ke file dalam mode teks, itu melakukan terjemahan baris baru saat menulis; yaitu, masing-masing "\n"dalam output akan diterjemahkan ke "\r\n"dalam file yang dihasilkan. Anda dapat melihat bagaimana ini menjadi masalah jika teks yang Anda tulis sudah mengandung "\r\n"urutan: hasilnya akan berada "\r\r\n"di akhir setiap baris. Saya berasumsi, setidaknya: Saya belum benar-benar mencobanya.
Nate CK

Mungkin sudah waktunya untuk memperbaiki jawabannya dan menghapus os.linesepproposal yang salah , bukan? Itu tidak akan menjadi drama besar dan kebanggaan penulis tidak akan terlalu menderita, saya percaya
ZAB

8
Kamu tidak tahu harga diriku. Tetapi yang lebih serius, saya pikir ini berguna untuk mencatat yang linesepada dan ada sehingga Anda dapat mengetahui apa pemisah garis sistem itu.
Charlie Martin

2
@ZAB Tidak semua string ditulis ke file dalam mode teks. linesepmasih bisa bermanfaat.
Kyle Strand

63

Karakter baris baru adalah \n. Ini digunakan di dalam string.

Contoh:

    print('First line \n Second line') 

di mana \nkarakter baris baru.

Ini akan menghasilkan hasil:

First line
 Second line

Jika Anda menggunakan Python 2, Anda tidak menggunakan tanda kurung pada fungsi cetak.


7
seperti saran, jika kita tidak memberikan 'spasi putih' setelah \ n kita tidak mendapatkan satu spasi indentasi di baris kedua. yang saya maksud adalah: cetak 'Baris pertama \ nLini kedua'
Manoj Kumar

Terima kasih telah menunjukkan untuk menggunakan arang "\ n" yang ada di dalam string! Mungkin tidak jelas bagi anak-anak Python baru seperti saya
GrayedFox

3
@ semua / siapa pun / ManojKumar a = 1; b = 2; cetak (a, "\ n", b); o / p: 1 2 (2 berada di baris baru dengan satu indentasi spasi putih tidak terlihat dengan benar tetapi asumsikan bahwa 1 dan 2 pada baris terpisah dengan satu indentasi spasi putih di 2) Dalam hal ini bagaimana saya akan menghapus spasi whilte (satu spasi indent) sebelum 2 dan akan membuat indentasi dengan 1. Catatan: kami tidak akan menggunakan 2 pernyataan cetak dan 1 dan 2 akan berada pada baris terpisah (baru).
PRAFUL ANAND

24

Anda dapat menulis di baris baru secara terpisah atau dalam satu string, yang lebih mudah.

Contoh 1

Memasukkan

line1 = "hello how are you"
line2 = "I am testing the new line escape sequence"
line3 = "this seems to work"

Anda dapat menulis '\ n' secara terpisah:

file.write(line1)
file.write("\n")
file.write(line2)
file.write("\n")
file.write(line3)
file.write("\n")

Keluaran

hello how are you
I am testing the new line escape sequence
this seems to work

Contoh 2

Memasukkan

Seperti yang ditunjukkan orang lain di jawaban sebelumnya, tempatkan \ n pada poin yang relevan di string Anda:

line = "hello how are you\nI am testing the new line escape sequence\nthis seems to work"

file.write(line)

Keluaran

hello how are you
I am testing the new line escape sequence
this seems to work

Saya pikir output Anda secara teknis salah. Baris kedua dan ketiga harus dicetak dengan satu spasi putih di sebelah kiri karakter pertama mereka. Solusi lain adalah dengan menghapus dua spasi ini dari variabel garis.
Christian Westbrook

Bagaimanapun, kode dalam contoh dua tidak akan menghasilkan output yang tepat yang telah Anda tampilkan.
Christian Westbrook

10

Jika Anda memasukkan beberapa baris teks sekaligus, saya menemukan ini sebagai format yang paling mudah dibaca.

file.write("\
Life's but a walking shadow, a poor player\n\
That struts and frets his hour upon the stage\n\
And then is heard no more: it is a tale\n\
Told by an idiot, full of sound and fury,\n\
Signifying nothing.\n\
")

\ Pada akhir setiap baris lolos dari baris baru (yang akan menyebabkan kesalahan).


Tanda kurung di dalam Anda, jadi garis keluar tidak perlu. Akhiri saja string, pindah ke baris baru, dan mulai yang baru. Tidak akan ada baris baru tambahan dan Anda tidak perlu melarikan diri. Juga, bahkan jika Anda melakukan hal di atas, karakter baris baru dan melarikan diri hanya membatalkan satu sama lain.
user144153

9

Dalam Python Anda bisa menggunakan karakter baris baru, yaitu \n


3
@maazza: bukankah pertanyaan tentang menulis ?
mhawke

9

Solusi paling sederhana

Jika Anda hanya menelepon printtanpa argumen, itu akan menghasilkan baris kosong.

print

Anda dapat mem-pipe output ke file seperti ini (dengan mempertimbangkan contoh Anda):

f = open('out.txt', 'w')
print 'First line' >> f
print >> f
print 'Second line' >> f
f.close()

Tidak hanya itu OS-agnostik (bahkan tanpa harus menggunakan ospaket), itu juga lebih mudah dibaca daripada meletakkan \ndalam string.

Penjelasan

The print()fungsi memiliki kata kunci argumen opsional untuk akhir string, yang disebut end, yang defaultnya karakter baris baru OS, untuk misalnya. \n. Jadi, saat Anda menelepon print('hello'), Python sebenarnya sedang mencetak 'hello' + '\n'. Yang berarti bahwa ketika Anda menelepon printtanpa argumen, itu sebenarnya pencetakan '' + '\n', yang menghasilkan baris baru.

Alternatif

Gunakan string multi-line.

s = """First line
    Second line
    Third line"""
f = open('out.txt', 'w')
print s >> f
f.close()

6

Platform independent line breaker: Linux, windows & IOS

import os
keyword = 'physical'+ os.linesep + 'distancing'
print(keyword)

Keluaran:

physical
distancing

4

Cara yang sama dengan '\n', meskipun Anda mungkin tidak perlu '\r'. Apakah ada alasan Anda memilikinya dalam versi Java Anda? Jika Anda membutuhkan / menginginkannya, Anda dapat menggunakannya dengan cara yang sama dengan Python juga.


1
\radalah carriage return, ketika Anda mendapatkan properti sistem untuk saluran baru, ia muncul sebagai\r\n
FabianCook

4
@SmartLemon: Itu mungkin benar pada Windows, tetapi pada sebagian besar sistem lain \nadalah satu-satunya karakter baris baru.
Greg Hewgill

@ Jean-MichaëlCelerier: Itu benar sebelum Mac OS X. Mac OS X digunakan \n.
Greg Hewgill

Ok, saya akan menghapus komentar saya, itu benar-benar tidak berguna. Maaf!
Jean-Michaël Celerier

4

\ n - penyisipan karakter baris baru yang sederhana berfungsi:

# Here's the test example - string with newline char:
In [36]: test_line = "Hi!!!\n testing first line.. \n testing second line.. \n and third line....."

# Output:
In [37]: print(test_line)

Hi!!!
 testing first line..
 testing second line..
 and third line.....

2

Sebagian besar karakter escape dalam string literal dari Jawa juga valid dalam Python, seperti "\ r" dan "\ n".


karena Python dan Java dipengaruhi oleh C dan itu datang kepada mereka dari bahasa ini. Untuk info lebih lanjut .
Alex.K.

1

Seperti disebutkan dalam jawaban lain: "Karakter baris baru adalah \ n. Ini digunakan di dalam string".

Saya menemukan cara yang paling sederhana dan mudah dibaca adalah dengan menggunakan fungsi "format", menggunakan nl sebagai nama untuk baris baru, dan memecah string yang ingin Anda cetak ke format yang tepat Anda akan mencetaknya:

print("line1{nl}"
      "line2{nl}"
      "line3".format(nl="\n"))

Itu akan menampilkan:

line1
line2
line3

Dengan cara ini melakukan tugas, dan juga memberikan keterbacaan kode yang tinggi :)


0

\ n memisahkan garis-garis string. Dalam contoh berikut, saya terus menulis catatan dalam satu lingkaran. Setiap catatan dipisahkan oleh \n.

f = open("jsonFile.txt", "w")

for row_index in range(2, sheet.nrows):

  mydict1 = {
    "PowerMeterId" : row_index + 1,
    "Service": "Electricity",
    "Building": "JTC FoodHub",
    "Floor": str(Floor),
    "Location": Location,
    "ReportType": "Electricity",
    "System": System,
    "SubSystem": "",
    "Incomer": "",
    "Category": "",
    "DisplayName": DisplayName,
    "Description": Description,
    "Tag": tag,
    "IsActive": 1,
    "DataProviderType": int(0),
    "DataTable": ""
  }
  mydict1.pop("_id", None)
  f.write(str(mydict1) + '\n')

f.close()

0

Perlu dicatat bahwa ketika Anda memeriksa string menggunakan shell python interaktif atau notebook Jupyter, \nstring backslashed lainnya seperti \tyang diberikan secara harfiah :

>>> gotcha = 'Here is some random message...'
>>> gotcha += '\nAdditional content:\n\t{}'.format('Yet even more great stuff!')
>>> gotcha
'Here is some random message...\nAdditional content:\n\tYet even more great stuff!'

Baris baru, tab, dan karakter non-cetak khusus lainnya diberikan sebagai spasi ketika dicetak , atau ditulis ke file:

>>> print('{}'.format(gotcha))
Here is some random message...
Additional content:
    Yet even more great stuff!
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.