pythonopener
⑴ python中open函數
f=open(r'C:UsersdellDesktop1.txt','r')
print(f.read())
文件打開操作只是打開了文件,還需要讀取文件內容才能顯示文件內容
⑵ python的open打開的是哪裡的文件啊
如果文件名是相對路徑名,則是以當前目錄為基點的路徑名。
假設當前路徑為/home/foo,則open('file.txt', 'rb')打開的是/home/foo/file.txt。
當前路徑默認是你啟動程序的目錄,例如:
$ pwd
/home/foo
$ ../goo/bin/look.py
此時,「當前路徑」應該是/home/foo,而不是/home/goo/bin
在程序中,可以通過os.getcwd()獲得當前路徑,也可以利用os.chdir()來改變當前路徑。
最後,如果你讀某文件沒有訪問許可權,open也是會報錯的(錯誤信息會詳細提示原因)。
⑶ 怎樣理解python里的Cookie和opener
以人人中的一個超級鏈接為例,
我們建一個urllib2_test10.py來比較一下原始URL和重定向的鏈接:
[python] view plain
from urllib2 import Request, urlopen, URLError, HTTPError
old_url = 'http://rrurl.cn/b1UZuP'
req = Request(old_url)
response = urlopen(req)
print 'Old url :' + old_url
print 'Real url :' + response.geturl()
運行之後可以看到真正的鏈接指向的網址:
2.info():
這個返回對象的字典對象,該字典描述了獲取的頁面情況。通常是伺服器發送的特定頭headers。目前是httplib.HTTPMessage 實例。
經典的headers包含"Content-length","Content-type",和其他內容。
我們建一個urllib2_test11.py來測試一下info的應用:
[python] view plain
from urllib2 import Request, urlopen, URLError, HTTPError
old_url = 'http://www..com'
req = Request(old_url)
response = urlopen(req)
print 'Info():'
print response.info()
運行的結果如下,可以看到頁面的相關信息:
下面來說一說urllib2中的兩個重要概念:Openers和Handlers。
1.Openers:
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。
正常情況下,我們使用默認opener:通過urlopen。
但你能夠創建個性的openers。
2.Handles:
Openers使用處理器handlers,所有的「繁重」工作由handlers處理。
每個handlers知道如何通過特定協議打開URLs,或者如何處理URL打開時的各個方面。
例如HTTP重定向或者HTTP cookies。
如果你希望用特定處理器獲取URLs你會想創建一個openers,例如獲取一個能處理cookie的opener,或者獲取一個不重定向的opener。
要創建一個 opener,可以實例化一個OpenerDirector,
然後調用.add_handler(some_handler_instance)。
同樣,可以使用build_opener,這是一個更加方便的函數,用來創建opener對象,他只需要一次函數調用。
build_opener默認添加幾個處理器,但提供快捷的方法來添加或更新默認處理器。
其他的處理器handlers你或許會希望處理代理,驗證,和其他常用但有點特殊的情況。
install_opener 用來創建(全局)默認opener。這個表示調用urlopen將使用你安裝的opener。
Opener對象有一個open方法。
該方法可以像urlopen函數那樣直接用來獲取urls:通常不必調用install_opener,除了為了方便。
說完了上面兩個內容,下面我們來看一下基本認證的內容,這里會用到上面提及的Opener和Handler。
Basic Authentication 基本驗證
為了展示創建和安裝一個handler,我們將使用HTTPBasicAuthHandler。
當需要基礎驗證時,伺服器發送一個header(401錯誤碼) 請求驗證。這個指定了scheme 和一個『realm』,看起來像這樣:Www-authenticate: SCHEME realm="REALM".
例如
Www-authenticate: Basic realm="cPanel Users"
客戶端必須使用新的請求,並在請求頭里包含正確的姓名和密碼。
這是「基礎驗證」,為了簡化這個過程,我們可以創建一個HTTPBasicAuthHandler的實例,並讓opener使用這個handler就可以啦。
HTTPBasicAuthHandler使用一個密碼管理的對象來處理URLs和realms來映射用戶名和密碼。
如果你知道realm(從伺服器發送來的頭里)是什麼,你就能使用HTTPPasswordMgr。
通常人們不關心realm是什麼。那樣的話,就能用方便的。
這個將在你為URL指定一個默認的用戶名和密碼。
這將在你為特定realm提供一個其他組合時得到提供。
我們通過給realm參數指定None提供給add_password來指示這種情況。
最高層次的URL是第一個要求驗證的URL。你傳給.add_password()更深層次的URLs將同樣合適。
說了這么多廢話,下面來用一個例子演示一下上面說到的內容。
我們建一個urllib2_test12.py來測試一下info的應用:
[python] view plain
# -*- coding: utf-8 -*-
import urllib2
# 創建一個密碼管理者
password_mgr = urllib2.()
# 添加用戶名和密碼
top_level_url = "http://example.com/foo/"
# 如果知道 realm, 我們可以使用他代替 ``None``.
# password_mgr.add_password(None, top_level_url, username, password)
password_mgr.add_password(None, top_level_url,'why', '1223')
# 創建了一個新的handler
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
# 創建 "opener" (OpenerDirector 實例)
opener = urllib2.build_opener(handler)
a_url = 'http://www..com/'
# 使用 opener 獲取一個URL
opener.open(a_url)
# 安裝 opener.
# 現在所有調用 urllib2.urlopen 將用我們的 opener.
urllib2.install_opener(opener)
注意:以上的例子我們僅僅提供我們的HHTPBasicAuthHandler給build_opener。
默認的openers有正常狀況的handlers:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor。
代碼中的top_level_url 實際上可以是完整URL(包含"http:",以及主機名及可選的埠號)。
例如:http://example.com/。
也可以是一個「authority」(即主機名和可選的包含埠號)。
例如:「example.com」 or 「example.com:8080」。
後者包含了埠號。
⑷ python open需要調用什麼
1. open()語法
open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函數有很多的參數,常用的是file,mode和encoding
file文件位置,需要加引號
mode文件打開模式,見下面3
buffering的可取值有0,1,>1三個,0代表buffer關閉(只適用於二進制模式),1代表line buffer(只適用於文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的數據採用何種編碼,一般採用utf8或者gbk;
errors的取值一般有strict,ignore,當取strict的時候,字元編碼出現問題的時候,會報錯,當取ignore的時候,編碼出現問題,程序會忽略而過,繼續執行下面的程序。
newline可以取的值有None, \n, \r, 」, 『\r\n',用於區分換行符,但是這個參數只對文本模式有效;
closefd的取值,是與傳入的文件參數有關,默認情況下為True,傳入的file參數為文件的文件名,取值為False的時候,file只能是文件描述符,什麼是文件描述符,就是一個非負整數,在Unix內核的系統中,打開一個文件,便會返回一個文件描述符。
2. Python中file()與open()區別
兩者都能夠打開文件,對文件進行操作,也具有相似的用法和參數,但是,這兩種文件打開方式有本質的區別,file為文件類,用file()來打開文件,相當於這是在構造文件類,而用open()打開文件,是用python的內建函數來操作,建議使用open
⑸ 文本文檔用python的open怎麼不能操作啊
f=open('/tmp/hello','w')
#open(路徑+文件名,讀寫模式)
#讀寫模式:r只讀,r+讀寫,w新建(會覆蓋原有文件),a追加,b二進制文件.常用模式
如:'rb','wb','r+b'等等
讀寫模式的類型有:
rU 或 Ua 以讀方式打開, 同時提供通用換行符支持 (PEP 278)
w 以寫方式打開,
a 以追加模式打開 (從 EOF 開始, 必要時創建新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 (參見 w )
a+ 以讀寫模式打開 (參見 a )
rb 以二進制讀模式打開
wb 以二進制寫模式打開 (參見 w )
ab 以二進制追加模式打開 (參見 a )
rb+ 以二進制讀寫模式打開 (參見 r+ )
wb+ 以二進制讀寫模式打開 (參見 w+ )
ab+ 以二進制讀寫模式打開 (參見 a+ )
⑹ Python使用open函數打開文件的常用模式
要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符:
f = open('/Users/michael/test.txt', 'r')
標示符'r'表示讀,這樣,我們就成功地打開了一個文件。
如果文件不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴你文件不存在:
這和前面的try ... finally是一樣的,但是代碼更佳簡潔,並且不必調用f.close()方法。
調用read()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了,所以,要保險起見,可以反復調用read(size)方法,每次最多讀取size個位元組的內容。另外,調用readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼調用。
如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復調用read(size)比較保險;如果是配置文件,調用readlines()最方便;
⑺ python里的opener返回的是伺服器的數據嗎
當使用布爾數組直接作為下標對象或者元組下標對象中有布爾數組時,都相當於用nonzero()將布爾數組轉換成一組整數數組,然後使用整數數組進行下標運算。
⑻ python中使用open需要close關閉,有不用關閉的語法么
有的,
with open('d:\\a.txt','r') as f:
....content = f.read()
這樣讀完會自動關閉
⑼ python 網路爬蟲的opener是什麼意思
在開始後面的內容之前,先來解釋一下urllib2中的兩個個方法:info and geturl
urlopen返回的應答對象response(或者HTTPError實例)有兩個很有用的方法info()和geturl()
1.geturl():
這個返回獲取的真實的URL,這個很有用,因為urlopen(或者opener對象使用的)或許會有重定向。獲取的URL或許跟請求URL不同。