Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melintasi Struktur Folder Secara Rekursif untuk Membaca Kandungan Fail Teks dalam Python?

Bagaimana untuk Melintasi Struktur Folder Secara Rekursif untuk Membaca Kandungan Fail Teks dalam Python?

Patricia Arquette
Patricia Arquetteasal
2024-10-18 14:36:44678semak imbas

How to Recursively Traverse a Folder Structure to Read Text File Contents in Python?

Bacaan Folder Rekursif Python: Mengatasi Penerokaan Cetek

Dalam bidang pengaturcaraan, selalunya mencabar untuk menavigasi struktur hierarki kompleks dengan cekap. Bagi peminat Python yang sedang berkembang dengan latar belakang C /Obj-C, melintasi struktur folder secara rekursif untuk membaca kandungan fail teks boleh menimbulkan halangan yang menggerunkan.

Mari kita mendalami kod yang anda berikan untuk memahami batasan yang menghalang pengulangannya melebihi kedalaman folder tunggal:

<code class="python">import os
import sys

rootdir = sys.argv[1]

for root, subFolders, files in os.walk(rootdir):

    for folder in subFolders:
        outfileName = rootdir + "/" + folder + "/py-outfile.txt" # hardcoded path
        folderOut = open( outfileName, 'w' )
        print "outfileName is " + outfileName

        for file in files:
            filePath = rootdir + '/' + file
            f = open( filePath, 'r' )
            toWrite = f.read()
            print "Writing '" + toWrite + "' to" + filePath
            folderOut.write( toWrite )
            f.close()

        folderOut.close()</code>

Penyebabnya terletak pada laluan berkod keras untuk filePath:

<code class="python">filePath = rootdir + '/' + file</code>

Kod ini menganggap kedalaman tetap satu folder, menghalangnya daripada betul mengekstrak laluan fail dalam folder bersarang. Untuk membetulkan isu ini, kami perlu memasukkan nilai akar semasa, yang menyediakan laluan folder yang sedang diulang:

<code class="python">filePath = os.path.join(root, file)</code>

Dengan menggunakan os.path.join, kami membina laluan fail penuh yang tepat, membenarkan kod untuk meneroka semua peringkat struktur folder dengan jayanya.

Selain itu, adalah bijak untuk menggunakan pernyataan dengan untuk mengendalikan operasi fail, yang memastikan penutupan fail automatik, meningkatkan kebolehbacaan kod dan mengurangkan potensi kebocoran sumber.

Berikut ialah versi semakan kod yang menangani isu ini:

<code class="python">import os
import sys

walk_dir = sys.argv[1]

print('walk_dir = ' + walk_dir)

# Converting to absolute path ensures portability
walk_dir = os.path.abspath(walk_dir)
print('walk_dir (absolute) = ' + walk_dir)

for root, subdirs, files in os.walk(walk_dir):
    print('--\nroot = ' + root)
    list_file_path = os.path.join(root, 'my-directory-list.txt')
    print('list_file_path = ' + list_file_path)

    with open(list_file_path, 'wb') as list_file:
        for subdir in subdirs:
            print('\t- subdirectory ' + subdir)

        for filename in files:
            file_path = os.path.join(root, filename)

            print('\t- file %s (full path: %s)' % (filename, file_path))

            with open(file_path, 'rb') as f:
                f_content = f.read()
                list_file.write(('The file %s contains:\n' % filename).encode('utf-8'))
                list_file.write(f_content)
                list_file.write(b'\n')</code>

Dengan pengubahsuaian ini, kod Python anda akan

Atas ialah kandungan terperinci Bagaimana untuk Melintasi Struktur Folder Secara Rekursif untuk Membaca Kandungan Fail Teks dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn