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!