Bagaimana cara membaca file teks menjadi variabel string dan menghapus baris baru?


964

Saya menggunakan segmen kode berikut untuk membaca file dengan python:

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

File input adalah:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

dan ketika saya mencetak data saya dapatkan

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

Saat saya melihat data dalam listbentuk. Bagaimana cara membuatnya menjadi string? Dan juga bagaimana cara menghapus "\n", "["dan "]"karakter dari itu?



7
Judul dan pertanyaannya tidak konsisten. Apakah Anda benar-benar ingin menyingkirkan \ n juga?
Julian

2
apakah Anda benar-benar ingin menghapus baris baru dari file / konten string, atau Anda hanya bingung tentang banyak meta-karakter dalam hasil cetak Anda dan benar-benar ingin menyimpan baris baru, tetapi tidak membuatnya ditampilkan sebagai "\ n"?
mnagel

11
Bagi mereka yang datang ke sini dari mesin pencari, Anda mungkin mencari jawaban @
xiaoyu

Jawaban:


1321

Anda bisa menggunakan:

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')

66
Apakah ada kerugian dalam menulis open("data.txt").read().replace('\n','')saja?
tuomassalo

262
Ya, versi Anda tidak secara eksplisit menutup file, yang kemudian akan ditunda hingga pengumpul sampah berjalan atau program berakhir. Pernyataan 'with' biasanya merangkum beberapa tindakan setup / teardown buka / tutup.
sleeplessnerd

12
Terimakasih atas klarifikasinya. Jadi, tampaknya versi saya mungkin baik untuk skrip kecil - tetapi OTOH sebaiknya dihindari sama sekali untuk tidak menjadikannya kebiasaan.
tuomassalo

10
@tuomassalo itu adalah PITA besar dalam proses uji / debug, karena ini tidak akan membersihkan file yang terbuka menangani jika Anda harus mengakhiri sebelum waktunya atau itu menjadi pengecualian.
GoingTharn

13
Tidak, rstrip('\n')hanya akan menghapus baris baru dari baris terakhir, replace('\n','')menghapusnya di mana-mana (pada dasarnya membuat seluruh file satu baris)
sleeplessnerd

632

Gunakan read(), bukan readline():

with open('data.txt', 'r') as myfile:
  data = myfile.read()

6
Mungkin, tetapi tidak menghapus garis baru seperti yang diinginkan OP. Saya masih menyukainya.
Randall Cook

60
Jika Anda mengembalikan satu string, menghapus baris baru tidak masuk akal - OP harus memilih satu string atau dilucuti \ n dari string dalam daftar.
Alex Dupuy

Bekerja tetapi tidak untuk file Unicode. Untuk mendukung utf8 pada python3, gunakan argumen tambahanencoding="utf-8"
FindOutIslamNow

2
Saya tidak mengerti mengapa solusi ini telah diposting dan juga mendapatkan begitu banyak upvotes. Ini pada dasarnya sama dengan yang diterima lebih dari setahun sebelumnya, dan itu bahkan kehilangan bagian stripping baru, membuat ini bahkan lebih tidak membantu ..
nnsense

65

Anda dapat membaca dari file dalam satu baris:

str = open('very_Important.txt', 'r').read()

Harap dicatat bahwa ini tidak menutup file secara eksplisit.

CPython akan menutup file ketika keluar sebagai bagian dari pengumpulan sampah.

Tetapi implementasi python lainnya tidak. Untuk menulis kode portabel, lebih baik menggunakan withatau menutup file secara eksplisit. Pendek tidak selalu lebih baik. Lihat https://stackoverflow.com/a/7396043/362951


32
Ini anti-idiomatik dan tidak direkomendasikan. openharus digunakan dalam suatu with ... aspernyataan.
Jorge Leitao

1
@ JC, bisakah Anda menjelaskan masalahnya? Apakah ini hanya masalah kebiasaan atau apakah with ... aspernyataan itu membawa sesuatu?
Titou

4
@Titou masalahnya adalah open.read () tidak menutup file sehingga kita perlu with ... asatau str.close()seperti yang ditunjukkan dalam jawaban Pedro. Lebih lanjut tentang pentingnya menutup file di sini
JBallin

@ Jonallin. Ungkapan ini dengan jelas menghilangkan sumber kesalahan. Terima kasih!
Titou

3
ini juga buruk karena Anda baru saja dibayangi str()dari builtin
Chris_Rands


45

Di Python 3.5 atau lebih baru, menggunakan pathlib Anda dapat menyalin konten file teks ke dalam variabel dan menutup file dalam satu baris:

from pathlib import Path
txt = Path('data.txt').read_text()

dan kemudian Anda bisa menggunakan str.replace untuk menghapus baris baru:

txt = txt.replace('\n', '')

31
with open("data.txt") as myfile:
    data="".join(line.rstrip() for line in myfile)

join () akan bergabung dengan daftar string, dan rstrip () tanpa argumen akan memangkas spasi, termasuk baris baru, dari akhir string.


12

Ini dapat dilakukan dengan menggunakan metode read ():

text_as_string = open('Your_Text_File.txt', 'r').read()

Atau karena mode default itu sendiri adalah 'r' (baca) jadi cukup gunakan,

text_as_string = open('Your_Text_File.txt').read()

9

Saya telah mengutak-atik ini untuk sementara waktu dan lebih suka menggunakan readkombinasi rstrip. Tanpa rstrip("\n"), Python menambahkan baris baru ke akhir string, yang dalam banyak kasus tidak terlalu berguna.

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print file_content

6

Sulit untuk mengetahui dengan pasti apa yang Anda kejar, tetapi sesuatu seperti ini harus Anda mulai:

with open ("data.txt", "r") as myfile:
    data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])

kurangi (lambda x, y: x + y.rstrip ('\ n'), ['a \ n', "b \ n", 'c'], "") jauh lebih keren: D
sleeplessnerd

3
@ Duncan apa yang akan Anda sarankan?
Chris Eberle

data = ' '.join(line.replace('\n', '') for line in myfile)atau versi MagerValp.
Duncan

6

Saya terkejut splitlines()belum ada yang disebutkan .

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()

Variabel datasekarang menjadi daftar yang terlihat seperti ini ketika dicetak:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

Perhatikan tidak ada baris baru ( \n).

Pada titik itu, sepertinya Anda ingin mencetak kembali baris ke konsol, yang dapat Anda capai dengan loop for:

for line in data:
    print line

4

Anda juga dapat mengupas setiap baris dan menyatukannya menjadi string terakhir.

myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
    data = data + line.strip();

Ini juga akan berhasil dengan baik.


Pedro terima kasih Saya hanya menambahkannya demi pengertian.
Sai Kiriti Badam

3

Anda dapat mengompres ini menjadi satu menjadi dua baris kode !!!

content = open('filepath','r').read().replace('\n',' ')
print(content)

jika file Anda berbunyi:

hello how are you?
who are you?
blank blank

output python

hello how are you? who are you? blank blank

3

Ini adalah solusi satu baris, salin-tempel yang juga menutup objek file:

_ = open('data.txt', 'r'); data = _.read(); _.close()

2
f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print string

2
Loop yang memiliki string += lineharus dihindari. Beberapa versi Python mungkin berhasil menghindari perilaku O (n ^ 2) di sini tetapi jawaban lain yang telah diberikan lebih baik dari ini. Anda juga tidak menghapus baris baru yang diminta sehingga kode Anda hanya cara yang sangat lambat untuk melakukanstring = f.read()
Duncan

Terima kasih sudah mengoreksi saya. Tetapi satu hal kecil adalah bahwa saya tidak harus menghapus baris baru, karena ketika saya menguji, itu tidak mencetak '\ n' out. @Duncan
hungneox

2

python3: Google "daftar comphrension" jika sintaks braket persegi baru bagi Anda.

 with open('data.txt') as f:
     lines = [ line.strip( ) for line in list(f) ]


1

Saya tidak merasa ada orang yang menjawab [] bagian dari pertanyaan Anda. Ketika Anda membaca setiap baris ke dalam variabel Anda, karena ada beberapa baris sebelum Anda mengganti \ n dengan '' Anda akhirnya membuat daftar. Jika Anda memiliki variabel x dan cetak hanya dengan

x

atau cetak (x)

atau str (x)

Anda akan melihat seluruh daftar dengan tanda kurung. Jika Anda memanggil setiap elemen dari (array of sort)

x [0] lalu itu menghilangkan tanda kurung. Jika Anda menggunakan fungsi str (), Anda hanya akan melihat data dan bukan ''. str (x [0])


1

Mungkin Anda bisa mencoba ini? Saya menggunakan ini dalam program saya.

Data= open ('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
    data[i] = data[i].strip()+ ' '
data = ''.join(data).strip()

1

Ekspresi reguler juga berfungsi:

import re
with open("depression.txt") as f:
     l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]

print (l)

['Aku', 'merasa', 'kosong', 'dan', 'mati', 'di dalam']


1

Untuk menghapus jeda baris menggunakan Python, Anda dapat menggunakan replacefungsi string.

Contoh ini menghapus semua 3 jenis jeda baris:

my_string = open('lala.json').read()
print(my_string)

my_string = my_string.replace("\r","").replace("\n","")
print(my_string)

Contoh file adalah:

{
  "lala": "lulu",
  "foo": "bar"
}

Anda dapat mencobanya menggunakan skenario replay ini:

https://repl.it/repls/AnnualJointHardware

masukkan deskripsi gambar di sini


0

Ini berfungsi: Ubah file Anda menjadi:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

Kemudian:

file = open("file.txt")
line = file.read()
words = line.split()

Ini membuat daftar bernama wordsyang sama dengan:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

Itu menyingkirkan "\ n". Untuk menjawab bagian tentang tanda kurung menghalangi Anda, lakukan saja ini:

for word in words: # Assuming words is the list above
    print word # Prints each word in file on a different line

Atau:

print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space

Ini mengembalikan:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

1
Mengubah file mungkin bekerja dalam situasi satu kali tetapi jika Anda memiliki ratusan file ini bukan solusi yang bisa diterapkan.
Craicerjack

0
with open(player_name, 'r') as myfile:
 data=myfile.readline()
 list=data.split(" ")
 word=list[0]

Kode ini akan membantu Anda membaca baris pertama dan kemudian menggunakan daftar dan opsi split Anda dapat mengonversi kata baris pertama yang dipisahkan oleh spasi untuk disimpan dalam daftar.

Daripada Anda dapat dengan mudah mengakses kata apa pun, atau bahkan menyimpannya dalam sebuah string.

Anda juga dapat melakukan hal yang sama dengan menggunakan for for.


0
file = open("myfile.txt", "r")
lines = file.readlines()
str = ''                                     #string declaration

for i in range(len(lines)):
    str += lines[i].rstrip('\n') + ' '

print str

-1

Coba yang berikut ini:

with open('data.txt', 'r') as myfile:
    data = myfile.read()

    sentences = data.split('\\n')
    for sentence in sentences:
        print(sentence)

Perhatian: Itu tidak menghapus \n. Ini hanya untuk melihat teks seolah-olah tidak ada\n

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.