2008-09-23 42 views
11

Sự cố của tôi ở bên dưới nhưng sẽ là nhận xét quan tâm từ bất kỳ ai có kinh nghiệm với xlrd.Làm cách nào để đọc tệp Excel vào Python bằng xlrd? Nó có thể đọc các định dạng Office mới hơn không?

Tôi vừa tìm thấy xlrd và nó trông giống như giải pháp hoàn hảo nhưng tôi gặp vấn đề khi bắt đầu. Tôi đang cố gắng trích xuất dữ liệu theo chương trình từ tệp Excel mà tôi lấy từ Dow Jones với các thành phần hiện tại của Trung bình Công nghiệp Dow Jones (liên kết: http://www.djindexes.com/mdsidx/?event=showAverages)

Khi tôi mở tệp chưa sửa đổi Tôi nhận được lỗi BIFF khó chịu (định dạng nhị phân không công nhận)

Tuy nhiên bạn có thể nhìn thấy trong ảnh chụp màn hình này mà Excel 2008 cho Mac nghĩ rằng nó là trong 'Excel 1997-2004' định dạng (ảnh chụp màn hình: http://skitch.com/alok/ssa3/componentreport-dji.xls-properties)

Nếu tôi thay vì mở nó trong Excel bằng tay và save as ' Excel 1997-2004 'định dạng rõ ràng, sau đó mở trong python usig xlrd, mọi thứ đều tuyệt vời. Hãy nhớ rằng, Office cho rằng tệp đã có định dạng 'Excel 1997-2004'. Tất cả các file là .xls

Dưới đây là một pastebin của một phiên ipython tái tạo vấn đề: http://pastie.textmate.org/private/jbawdtrvlrruh88mzueqdq

Bất kỳ suy nghĩ về: Làm thế nào để đánh lừa xlrd thành công nhận các tập tin để tôi có thể trích xuất dữ liệu? Cách sử dụng python để tự động hóa định dạng 'lưu dưới dạng' rõ ràng thành định dạng mà xlrd sẽ chấp nhận? Gói B?

Trả lời

0

Vâng đây là một số mã mà tôi đã làm: (nhìn xuống phía dưới): here

Không chắc chắn về định dạng mới hơn - nếu xlrd không thể đọc nó, xlrd cần phải có một phiên bản mới phát hành!

-1

Bạn có phải sử dụng xlrd không? Tôi vừa tải xuống 'UPDATED - Dow Jones Industrial Average Movers - 2008' từ trang web đó và không gặp khó khăn khi đọc nó với pyExcelerator.

import pyExcelerator 
book = pyExcelerator.parse_xls('DJIAMovers.xls') 
+0

nope không kết hôn với xlrd. sẽ kiểm tra pyExcelerator bây giờ ... –

+0

Có vẻ như không có nhiều tài liệu sẵn có cho pyExcelerator. Có thể bạn có thể chỉ cho tôi những điều cơ bản của việc mở một tập tin và trích xuất dữ liệu? –

1

Thông tin thêm về pyExcelerator: Để đọc một tập tin, làm điều này:

import pyExcelerator 
book = pyExcelerator.parse_xls(filename) 

nơi filename là một chuỗi là tên file để đọc (không phải là một đối tượng tập tin tương tự). Điều này sẽ cung cấp cho bạn một cấu trúc dữ liệu đại diện cho sổ làm việc: một danh sách các cặp, trong đó phần tử đầu tiên của cặp là tên trang tính và phần tử thứ hai là dữ liệu trang tính.

Dữ liệu trang tính là từ điển, trong đó các khóa là các cặp (hàng, col) (bắt đầu bằng 0) và các giá trị là nội dung ô - thường là int, float hoặc chuỗi. Vì vậy, ví dụ: trong trường hợp đơn giản của tất cả dữ liệu nằm trên trang tính đầu tiên:

data = book[0][1] 
print 'Cell A1 of worksheet %s is: %s' % (book[0][0], repr(data[(0, 0)])) 

Nếu ô trống, bạn sẽ nhận được một KeyError. Nếu bạn đang xử lý các ngày, họ có thể (tôi quên) đi qua như số nguyên hoặc phao; nếu đây là trường hợp, bạn sẽ cần phải chuyển đổi. Về cơ bản quy tắc là: datetime.datetime (1899, 12, 31) + datetime.timedelta (days = n) nhưng có thể bị tắt 1 hoặc 2 (vì Excel coi 1900 là năm nhuận để tương thích với Lotus và vì Tôi không thể nhớ nếu 1900-1-1 là 0 hoặc 1), do đó, hãy thử một số lỗi và kiểm tra. Datetimes được lưu trữ như float, tôi nghĩ (ngày và phân số của một ngày).

Tôi nghĩ rằng có một phần hỗ trợ cho các công thức, nhưng tôi sẽ không đảm bảo bất cứ điều gì.

+3

pyExcelerator có một số lỗi đã biết - nhánh 'xlrd' tương thích và được duy trì. – mikemaccana

3

xlrd hỗ trợ cho Office 2007/2008 định dạng (OpenXML) là trong thử nghiệm alpha - xem bài sau trong nhóm tin python-excel: http://groups.google.com/group/python-excel/msg/0c5f15ad122bf24b?hl=en

+1

John Machin đã phát hành công khai (danh sách gửi thư) và đã thể hiện các kế hoạch cụ thể để tích hợp vào một bản phát hành đầy đủ mới của xlrd vào cuối năm. –

+0

Điều này đã được phát hành cách đây vài ngày trong v0.8: https://groups.google.com/forum/?fromgroups#!topic/python-excel/w2AoQkX3TZc[1-25] – RuiDC

26

FWIW, tôi là tác giả của xlrd, và nhà duy trì của xlwt (một nhánh của pyExcelerator). Một vài điểm:

  1. Tệp ComponentReport-DJI.xls bị đặt tên sai; nó không phải là một tệp XLS, nó là một tệp giá trị được phân tách bằng tab. Mở nó bằng trình soạn thảo văn bản (ví dụ: Notepad) và bạn sẽ thấy ý tôi là gì. Bạn cũng có thể nhìn vào các byte thô không-rất-liệu với Python:

    >>> open('ComponentReport-DJI.xls', 'rb').read(200) 
    'COMPANY NAME\tPRIMARY EXCHANGE\tTICKER\tSTYLE\tICB SUBSECTOR\tMARKET CAP RANGE\ 
    tWEIGHT PCT\tUSD CLOSE\t\r\n3M Co.\tNew York SE\tMMM\tN/A\tDiversified Industria 
    ls\tBroad\t5.15676229508\t50.33\t\r\nAlcoa Inc.\tNew York SE\tA' 
    

    Bạn có thể đọc tập tin này bằng mô-đun csv Python của ... chỉ cần sử dụng delimiter="\t" trong lệnh gọi csv.reader().

  2. xlrd có thể đọc bất kỳ tệp nào mà pyExcelerator có thể đọc và đọc chúng tốt hơn — ngày không xuất hiện dưới dạng phao, và toàn bộ câu chuyện trên Excel ngày nằm trong tài liệu xlrd.

  3. pyExcelerator bị bỏ qua — xlrd và xlwt vẫn còn hoạt động. Kiểm tra http://groups.google.com/group/python-excel

HTH John

Các vấn đề liên quan