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?

klijo
sumber
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', '')
sulit tidur
sumber
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()
Xiaoyu
sumber
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

Nafis Ahmad
sumber
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
50

Untuk menggabungkan semua baris ke string dan menghapus baris baru yang biasanya saya gunakan:

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 
CONvid19
sumber
Ini memberi UnicodeDecodeError dalam kode saya Lihat ini stackoverflow.com/q/18649512/9339242
Arayan Singh
Anda mungkin perlu menentukan pengkodean karakter.
CONvid19
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', '')
Jonathan Sudiaman
sumber
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.

MagerValp
sumber
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()
Loochie
sumber
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
angin puyuh
sumber
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()])
Chris Eberle
sumber
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
Julian
sumber
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.

Sai Kiriti Badam
sumber
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
Michael Smith
sumber
3

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

_ = open('data.txt', 'r'); data = _.read(); _.close()
Edward D'Souza
sumber
2
f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print string
hungneox
sumber
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) ]
gerardw
sumber
2

Sudahkah Anda mencoba ini?

x = "yourfilename.txt"
y = open(x, 'r').read()

print(y)
Thorax The PyChangeling
sumber
1
Ini salah. Anda ingin y = buka (x, 'r'). Read () jika Anda akan melakukannya dengan cara itu.
Katastic Voyage
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])

John Galbraith
sumber
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()

sumber
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']

Alex
sumber
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

Sma Ma
sumber
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
PyGuy
sumber
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.

Lakshaya Maheshwari
sumber
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
akD
sumber
-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

Palak Jain
sumber