Saya ingin mengubah beberapa file sekaligus, jika saya bisa menulis kepada mereka semua. Saya ingin tahu apakah saya dapat menggabungkan beberapa panggilan terbuka dengan with
pernyataan:
try:
with open('a', 'w') as a and open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Jika itu tidak mungkin, seperti apa solusi yang elegan untuk masalah ini?
with
untuk membuka daftar file variabel?ExitStack
pada Python 3.3. Tidak ada cara mudah untuk melakukan ini di versi Python sebelumnya.Cukup ganti
and
dengan,
dan Anda selesai:sumber
Untuk membuka banyak file sekaligus atau untuk jalur file yang panjang, mungkin berguna untuk memecah banyak hal menjadi beberapa baris. Dari Panduan Gaya Python seperti yang disarankan oleh @Sven Marnach dalam komentar ke jawaban lain:
sumber
Bersarang dengan pernyataan akan melakukan pekerjaan yang sama, dan menurut saya, lebih mudah untuk dihadapi.
Katakanlah Anda memiliki inFile.txt, dan ingin menulisnya menjadi dua outFile secara bersamaan.
EDIT:
Saya tidak mengerti alasan downvote. Saya menguji kode saya sebelum menerbitkan jawaban saya, dan itu berfungsi seperti yang diinginkan: Itu menulis ke semua outFile, seperti pertanyaannya. Tidak ada duplikat tulisan atau gagal menulis. Jadi saya benar-benar ingin tahu mengapa jawaban saya dianggap salah, suboptimal atau semacamnya.
sumber
Sejak Python 3.3, Anda dapat menggunakan kelas
ExitStack
daricontextlib
modul untukmembuka sejumlah file secara aman .
Itu dapat mengelola sejumlah objek sadar konteks yang dinamis , yang berarti bahwa itu akan terbukti sangat berguna jika Anda tidak tahu berapa banyak file yang akan Anda tangani .
Bahkan, kasus penggunaan kanonik yang disebutkan dalam dokumentasi adalah mengelola sejumlah file dinamis.
Jika Anda tertarik dengan detailnya, berikut adalah contoh umum untuk menjelaskan cara
ExitStack
beroperasi:Keluaran:
sumber
Dengan python 2.6 Ini tidak akan berfungsi, kita harus menggunakan cara di bawah ini untuk membuka banyak file:
sumber
Jawaban telat (8 tahun), tetapi bagi seseorang yang ingin menggabungkan beberapa file menjadi satu , fungsi berikut mungkin bisa membantu:
sumber