Tôi đang sử dụng OS.Walk (thư mục) để hiển thị tất cả các tệp từ thư mục đó. Vấn đề là tôi chỉ cần hiển thị các tệp có chứa một chuỗi được hỏi trong tên của nó và nó cũng phải quản lý metachars.
Những gì tôi có bây giờ là:
for root, subdirs, files in os.walk(dir1): for filename in files: if substring in filename: name_path = os.path.join(root,filename) list.insert(END, name_path)Điều này hoạt động tốt, nhưng nếu substring = *, vì tôi không có các tệp chứa ' *', danh sách của tôi trống.
Vì vậy, làm thế nào để tôi có được điều này để hoạt động nếu substring có chứa một metachar?
Đã hỏi ngày 29 tháng 3 năm 2016 lúc 20:43Mar 29, 2016 at 20:43
Đã trả lời ngày 29 tháng 3 năm 2016 lúc 20:46Mar 29, 2016 at 20:46
BrianbrianBrian
2.13612 Huy hiệu bạc23 Huy hiệu đồng12 silver badges23 bronze badges
2
Bạn có thể sử dụng Quả cầu. Nó rất tiện dụng và tương tự như tìm ra lệnh trong Linux.
import glob glob.glob("/home/user/*.txt")Tìm kiếm trong nhiều thư mục con
glob.glob("/home/user/*/*.txt")hoặc
glob.glob("/home/user/logs?.txt")Đã trả lời ngày 11 tháng 5 năm 2019 lúc 18:19May 11, 2019 at 18:19
Amystamystamyst
5961 Huy hiệu vàng7 Huy hiệu bạc22 Huy hiệu đồng1 gold badge7 silver badges22 bronze badges
Đây là một chương trình Python để tìm kiếm một văn bản được chỉ định trong tất cả các tệp của một thư mục. Người dùng nhập đường dẫn thư mục và chuỗi văn bản để tìm kiếm. Ngoài ra, bằng cách nhập loại tệp, tìm kiếm có thể được giới hạn trong một tập hợp con của các tệp trong thư mục. Chương trình xuất các tên tệp chứa chuỗi tìm kiếm và cả số dòng và số cột nơi văn bản xuất hiện trong tệp.
Dòng chảy chương trình
Chương trình sử dụng mô -đun HĐH để lấy các tệp từ một thư mục.os module to get the files from a directory.
Người dùng được nhắc nhập một đường dẫn thư mục, loại tệp và chuỗi văn bản được tìm kiếm. Nếu đường dẫn thư mục không chứa dấu phân cách thư mục, đó là chém chuyển tiếp (/) trong trường hợp Linux và một dấu gạch chéo lùi () hoặc chém về phía trước (/) trong trường hợp nếu Windows, thì nó được nối vào đường dẫn tìm kiếm. Đường dẫn kết quả sau đó được xác nhận. Nếu đường dẫn không hợp lệ hoặc nếu nó không tồn tại thì đường dẫn tìm kiếm được đặt thành thư mục hiện tại.
Trong bước tiếp theo, mỗi tệp trong thư mục được kiểm tra và nếu nó khớp với loại tệp. Loại tệp có thể là bất kỳ định dạng tệp văn bản nào như .txt, .log, .ini, .conf, v.v. . Nếu không có loại tệp nào là đầu vào thì chương trình sẽ tìm kiếm tất cả các tệp trong thư mục.
Các tệp khớp với loại tệp được mở và mỗi dòng được đọc trong vòng lặp. Phương thức Find () được gọi để kiểm tra xem chuỗi tìm kiếm có mặt trong một dòng không. Nếu được tìm thấy, phương thức tìm trả về chỉ mục trong đó chuỗi được tìm thấy. Tên tệp, số dòng, chỉ mục và toàn bộ dòng chứa chuỗi là đầu ra cho bảng điều khiển người dùng.
Nguồn chương trình
#Import os module import os # Ask the user to enter string to search search_path = input("Enter directory path to search : ") file_type = input("File Type : ") search_str = input("Enter the search string : ") # Append a directory separator if not already present if not (search_path.endswith("/") or search_path.endswith("\\") ): search_path = search_path + "/" # If path does not exist, set search path to current directory if not os.path.exists(search_path): search_path ="." # Repeat for each file in the directory for fname in os.listdir(path=search_path): # Apply file type filter if fname.endswith(file_type): # Open file for reading fo = open(search_path + fname) # Read the first line from the file line = fo.readline() # Initialize counter for line number line_no = 1 # Loop until EOF while line != '' : # Search for string in line index = line.find(search_str) if ( index != -1) : print(fname, "[", line_no, ",", index, "] ", line, sep="") # Read next line line = fo.readline() # Increment line counter line_no += 1 # Close the files fo.close()Đầu ra chương trình mẫu
Chạy chương trình để kiểm tra tất cả các tệp nhật ký trong thư mục c: \ mẫu chứa từ "lỗi"
Enter directory path to search : c:\samples File Type : .log Enter the search string : error LogFile-20150922.log[5,25] 22/09/2015 08:56 Unknown error occured.