Hướng dẫn python open file if name contains - mở tệp python nếu tên chứa

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

Hướng dẫn python open file if name contains - mở tệp python nếu tên chứa

Đã 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.

Làm thế nào để kiểm tra xem một tên tệp có tồn tại trong Python không?

Sử dụng pathlib ...
Cú pháp: pathlib.path.exists (đường dẫn).
Parameter:.
Đường dẫn: Một đối tượng giống như đường dẫn biểu thị đường dẫn hệ thống tệp ..
Loại trả về: Phương thức này trả về giá trị boolean của bool lớp.Phương thức này trả về đúng nếu đường dẫn tồn tại khác trả về sai ..

Làm thế nào để kiểm tra xem một tệp có mặt trong một thư mục trong Python không?

os.path.exists () Để kiểm tra xem một tệp hoặc thư mục có tồn tại bằng Python không.Chúng tôi tiếp tục sử dụng phương pháp này để kiểm tra xem một đường dẫn tệp cụ thể có đề cập đến một mô tả đã mở hay không. path. exists() to check if a file or directory exists using Python. We further use this method to check if a particular file path refers to an already open descriptor or not.

Làm thế nào để kiểm tra xem một tệp có tồn tại hay không?

Cách kiểm tra nếu tập tin tồn tại..
đường dẫn.tồn tại () - Trả về đúng nếu đường dẫn hoặc thư mục tồn tại ..
đường dẫn.isfile () - Trả về đúng nếu đường dẫn là tệp ..
đường dẫn.isdir () - Trả về đúng nếu đường dẫn là thư mục ..
pathlib.path.exists () - Trả về đúng nếu đường dẫn hoặc thư mục tồn tại.(Trong Python 3,4 trở lên phiên bản).