2008-12-06 35 views
28

Tôi đang sử dụng urllib2 để đọc trong một trang. Tôi cần phải làm một regex nhanh chóng trên nguồn và kéo ra một vài biến nhưng urllib2 trình bày như là một đối tượng tập tin chứ không phải là một chuỗi.Đọc đối tượng tệp dưới dạng chuỗi trong python

Tôi mới dùng python nên tôi đang cố gắng xem cách tôi sử dụng đối tượng tệp để thực hiện việc này. Có một cách nhanh chóng để chuyển đổi này thành một chuỗi?

Trả lời

74

Bạn có thể sử dụng Python ở chế độ tương tác để tìm kiếm giải pháp.

nếu f là đối tượng của bạn, bạn có thể nhập dir(f) để xem tất cả các phương pháp và thuộc tính. Có một cái gọi là read. Nhập help(f.read) và nó cho bạn biết rằng f.read() là cách để truy xuất chuỗi từ một đối tượng tệp.

+3

Cảm ơn câu trả lời chuyên sâu (đặc biệt là về việc tìm các thuộc tính/phương thức của đối tượng). .read() hoạt động hoàn hảo. – Oli

+5

Câu trả lời hay từ trường 'dạy cá'. Tôi sẽ cung cấp cho bạn +2 nếu tôi có thể! –

+5

Đôi khi tất cả những gì chúng tôi muốn là sử dụng stackoverflow như một cuốn sách tham khảo nhanh. Câu trả lời của gimel hữu ích hơn rất nhiều đối với các googlers. –

13

Từ doc file.read() (tôi nhấn mạnh):

file.read ([size])

đọc nhiều nhất là byte kích thước từ tập tin (ít hơn nếu đọc chạm EOF trước khi có được kích thước byte). Nếu đối số kích thước là âm hoặc bỏ qua, hãy đọc tất cả dữ liệu cho đến khi đạt được EOF. Các byte được trả về dưới dạng đối tượng chuỗi. Một chuỗi rỗng được trả về khi EOF gặp phải ngay lập tức. (Đối với một số tệp nhất định, như tty, có ý nghĩa khi tiếp tục đọc sau khi nhấn EOF.) Lưu ý rằng phương pháp này có thể gọi hàm C nằm bên dưới nhiều lần trong nỗ lực thu được càng gần byte kích thước càng tốt. Cũng lưu ý rằng khi ở chế độ không chặn, ít dữ liệu hơn được yêu cầu có thể được trả lại, ngay cả khi không có tham số kích thước nào được đưa ra.

Lưu ý rằng tìm kiếm regexp trên đối tượng chuỗi lớn có thể không hiệu quả và cân nhắc thực hiện tìm kiếm theo từng dòng, sử dụng file.next() (đối tượng tệp là trình lặp riêng của nó).

5

Michael Foord, aka Voidspace có một hướng dẫn tuyệt vời trên urllib2 mà bạn có thể tìm thấy ở đây: urllib2 - The Missing Manual

gì bạn đang làm nên được khá đơn giản, quan sát mẫu này mã:

import urllib2 
import re 
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml") 
html = response.read() 
pattern = '(V.+space)' 
wordPattern = re.compile(pattern, re.IGNORECASE) 
results = wordPattern.search(html) 
print results.groups() 
Các vấn đề liên quan