2013-10-08 12 views
8

tôi cần phải đọc dữ liệu nguồn toàn từ file something.zip (không giải nén nó)đọc toàn bộ tập tin cùng một lúc

tôi đã cố gắng

f = open('file.zip') 
s = f.read() 
f.close() 
return s 

nhưng nó sẽ trả về chỉ vài byte và nguồn dữ liệu không toàn bộ. Bất kỳ ý tưởng làm thế nào để đạt được nó? Cảm ơn

+15

Sử dụng chế độ nhị phân khi bạn đang xử lý tệp nhị phân. 'open ('file.zip', 'rb')' – falsetru

+0

Nếu tôi hiểu chính xác, chế độ nhị phân chỉ đề cập đến các dòng mới và chỉ trên Windows, vì vậy nó sẽ không giải quyết được vấn đề. Làm thế nào bạn đếm byte? – Vlad

+4

@Vlad có một EOF (kết thúc của tập tin ký tự) có thể chấm dứt một đọc trong chế độ văn bản chỉ trên Windows –

Trả lời

20

Sử dụng chế độ nhị phân (b) khi bạn đang xử lý tệp nhị phân.

def read_zipfile(path): 
    with open(path, 'rb') as f: 
     return f.read() 

BTW, sử dụng with statement thay vì hướng dẫn sử dụng close.

2

này nên làm điều đó:

In [1]: f = open('/usr/bin/ping', 'rb') 

In [2]: bytes = f.read() 

In [3]: len(bytes) 
Out[3]: 9728 

Để so sánh, đây là file tôi mở trong đoạn code trên:

-rwx------+ 1 xx yy 9.5K Jan 19 2005 /usr/bin/ping* 
3

Như đã đề cập có một nhân vật EOF (0x1A) mà chấm dứt .read() hoạt động. Để tái tạo điều này và minh họa:

# Create file of 256 bytes 
with open('testfile', 'wb') as fout: 
    fout.write(''.join(map(chr, range(256)))) 

# Text mode 
with open('testfile') as fin: 
    print 'Opened in text mode is:', len(fin.read()) 
    # Opened in text mode is: 26 

# Binary mode - note 'rb' 
with open('testfile', 'rb') as fin: 
    print 'Opened in binary mode is:', len(fin.read()) 
    # Opened in binary mode is: 256 
Các vấn đề liên quan