Bạn thực sự có thể tải tệp vào chuỗi và tìm chuỗi đó cho chuỗi byte 0xffc0
bằng phương pháp str.find()
. Nó hoạt động cho bất kỳ chuỗi byte nào.
Mã để làm điều này phụ thuộc vào một vài điều. Nếu bạn mở tệp ở chế độ nhị phân và bạn đang sử dụng Python 3 (cả hai có thể là cách thực hành tốt nhất cho kịch bản này), bạn sẽ cần phải tìm chuỗi byte (trái với chuỗi ký tự), có nghĩa là bạn phải thêm tiền tố vào chuỗi với b
.
with open(filename, 'rb') as f:
s = f.read()
s.find(b'\xff\xc0')
Nếu bạn mở tập tin trong chế độ văn bản bằng Python 3, bạn sẽ phải tìm kiếm một chuỗi ký tự:
with open(filename, 'r') as f:
s = f.read()
s.find('\xff\xc0')
mặc dù không có lý do cụ thể để làm điều này. Nó không giúp bạn có được lợi thế so với cách trước và nếu bạn đang sử dụng nền tảng xử lý tệp nhị phân và tệp văn bản khác nhau (ví dụ: Windows), có khả năng điều này sẽ gây ra sự cố.
Python 2 không phân biệt giữa chuỗi byte và chuỗi ký tự, vì vậy nếu bạn đang sử dụng phiên bản đó, bạn không bao gồm hoặc loại trừ b
trong b'\xff\xc0'
. Và nếu nền tảng của bạn xử lý tệp nhị phân và tệp văn bản giống hệt nhau (ví dụ: Mac hoặc Linux), bạn cũng không cần phải sử dụng 'r'
hoặc 'rb'
làm chế độ tệp hay không. Nhưng tôi vẫn khuyên bạn nên sử dụng một cái gì đó giống như mẫu mã đầu tiên ở trên chỉ để tương thích về phía trước - trong trường hợp bạn đã từng chuyển sang Python 3, thì đó là một điều ít khắc phục hơn.
Nguồn
2010-07-10 00:48:58
bạn đã bao giờ nhìn vào tưởng tượng chưa? IIRC cũng có một thư viện python cho nó. – txwikinger
Tôi có, và nó hoạt động tuyệt vời, nhưng nó khá nặng cho việc tìm kiếm kích thước của tập tin. – Parand
bạn nên sử dụng một mô-đun thích hợp cho một cái gì đó như thế này http://snippets.dzone.com/posts/show/1021 –