Saya ingin menggabungkan file txt menjadi satu file txt. Kode di bawah ini berfungsi dengan baik. Tetapi satu-satunya masalah adalah saya tidak mengerti string mana yang berasal dari txt.

import glob

read_files = glob.glob("*.txt")

with open("result.txt", "wb") as outfile:
    for f in read_files:
        with open(f, "rb") as infile:
            outfile.write(infile.read())

Saya ingin hasilnya terlihat seperti:

file1.txt
string1
string2
file2.txt
string3
string4
0
birisix 12 Mei 2021, 14:20

2 jawaban

Jawaban Terbaik

Gunakan pickle untuk dump nama file untuk result.txt

import glob
import pickle

read_files = glob.glob("*.txt")

with open("abc.txt", "wb") as outfile:
    for f in read_files:
        with open(f, "rb") as infile:
            pickle.dump(f, outfile)
            outfile.write(infile.read())

Anda dapat menggunakan dump untuk bagian outfile.write() juga seperti ini: pickle.dump(infile.read(), outfile)

CATATAN: Sebaiknya gunakan .dat untuk file biner dan .txt untuk file teks biasa.

1
SPARTACUS5329 12 Mei 2021, 11:28

Kode di bawah ini berfungsi persis seperti yang saya inginkan. Pertama, saya mencoba mencetak variabel f ​​yang memegang nama file. outfile.write(f) Tapi karena saya membuka file dalam mode "rb", saya mendapatkan kesalahan: TypeError: a bytes-like object is required, not 'str'. Saya mengubah kode menjadi outfile.write(f.encode()) atas saran teman saya. Di sini, saya tidak tahu apa yang dilakukan metode encode(). Mungkin seseorang menjelaskan. Kemudian, saya menggunakan outfile.write("\n".encode()) untuk memulai baris baru setelah nama file. Kode terakhir di bawah ini:

import glob

read_files = glob.glob("*.txt")

with open("result.txt", "wb") as outfile:
    for f in read_files:
        with open(f, "rb") as infile:
            outfile.write(f.encode())
            outfile.write("\n".encode())
            outfile.write(infile.read())
0
birisix 12 Mei 2021, 18:46