2009-08-24 10 views
8

Tôi muốn có thể mở tệp hình ảnh và thêm các giá trị thập lục phân byte-by-byte. Tôi không có ý tưởng làm thế nào để làm điều này và googling "python byte chỉnh sửa" và "python byte mảng" đã không đưa ra bất cứ điều gì, đáng ngạc nhiên. Ai đó có thể chỉ cho tôi thư viện mà tôi cần sử dụng, các phương pháp cụ thể mà tôi có thể google hoặc hướng dẫn/hướng dẫn không?Python - Cách chỉnh sửa byte tệp thập lục phân theo byte

+0

Đây có phải là điều bạn muốn làm theo chương trình không? Hay bạn đang tìm kiếm một trình soạn thảo hex? –

+0

@david: tôi nghĩ tôi muốn làm điều đó theo chương trình. trong tệp hình ảnh tùy chỉnh của tôi, có 7 thứ nguyên xác định mỗi pixel và chúng được sắp xếp theo một đoạn bằng cách tăng dần về cơ bản trong tất cả 7 thứ nguyên. tôi muốn hoàn tác, tách tất cả 7 kích thước và lắp lại chúng để chúng phù hợp với đặc tả tệp TIF cho hình ảnh. tôi nghĩ rằng tốt nhất nên được thực hiện theo chương trình, phải không? – sepiroth

+0

Tôi sẽ làm phần TIFF thông qua thư viện PIL. – Nelson

Trả lời

8

Thư viện chuẩn Python có mô-đun mmap, có thể được sử dụng để thực hiện chính xác việc này. Hãy xem the documentation để biết thêm thông tin.

+1

+1. Thông thường tôi sẽ tải các tập tin vào bộ nhớ để chỉnh sửa như trong câu trả lời của sth, nhưng nếu tập tin có thể rất dài, mmap là tốt hơn. Tất nhiên nếu tập tin là rất * rất * dài và sẽ không phù hợp trong không gian địa chỉ của bạn, nó trở lại để mở (path, 'r + b') và tìm kiếm() ... – bobince

+0

@bobince: tại thời điểm nào trong ý kiến ​​sẽ là một tập tin "quá dài" để đi với câu trả lời của sth và di chuyển lên mmap? – sepiroth

+0

@hatorade: Mở/đọc/đóng chuẩn có thể xử lý các tệp lớn như bộ nhớ khả dụng, nhưng bạn sẽ thấy các cải tiến hiệu suất bằng cách sử dụng mmap() vì chỉ các trang bạn sửa đổi sẽ được đọc từ đĩa. Tôi ước tính sự khác biệt về hiệu suất đáng kể sẽ rõ ràng khi tệp đạt đến megabyte. –

4

khuôn khổ Các Hachoir là một tập hợp của Python thư viện và các công cụ để phân tích và chỉnh sửa tập tin nhị phân:

http://pypi.python.org/pypi/hachoir-core

Nó có kiến ​​thức về các loại tập tin phổ biến, vì vậy đây chỉ có thể là những gì bạn cần.

10

Tùy thuộc vào những gì bạn muốn làm điều đó có thể là đủ để open the file in binary mode và đọc dữ liệu với file chức năng bình thường:

# load it 
f = open("somefile", 'rb') 
data = f.read() 
f.close() 

# do something with data 
data.reverse() 

# save it 
f = open("somefile.new", 'wb') 
f.write(data) 
f.close() 

Python không thực sự quan tâm nếu chuỗi data chứa "nhị phân" hay " văn bản "dữ liệu. Nếu bạn chỉ muốn thực hiện các sửa đổi đơn giản cho một tệp có kích thước hợp lý thì điều này có thể là đủ tốt.

+0

vâng tôi chỉ muốn mở một tập tin hình ảnh tùy chỉnh và chuyển nó thành .tiff. đây có thể là mẹo vì tôi về cơ bản "hoàn tác" thuật toán được sử dụng để gán dữ liệu pixel trong tệp hình ảnh tùy chỉnh và sắp xếp lại nó theo thông số kỹ thuật .tif – sepiroth

1

Kiểm tra mô-đun stuct.

Mô-đun này thực hiện chuyển đổi giữa giá trị Python và cấu trúc C được biểu diễn dưới dạng chuỗi Python. Nó sử dụng các chuỗi định dạng (được giải thích bên dưới) dưới dạng các mô tả nhỏ gọn về việc bố trí các cấu trúc C và chuyển đổi dự định thành/từ các giá trị Python. Điều này có thể được sử dụng trong việc xử lý dữ liệu nhị phân được lưu trữ trong các tệp hoặc từ các kết nối mạng, trong số các nguồn khác.