2012-08-02 14 views
8

वहाँ एक possibillity फ़ाइल नामअजगर httplib/urllib प्राप्त फ़ाइल नाम

e.g. xyz.com/blafoo/showall.html 

पाने के लिए यदि आप urllib या httplib के साथ काम है?

ताकि मैं फ़ाइल पर फ़ाइल नाम के तहत फ़ाइल को सहेज सकूं?

आप की तरह

xyz.com/blafoo/ 

साइट पर जाएं, यदि आप नहीं कर सकते फ़ाइल नाम देखते हैं।

धन्यवाद

+0

संभव डुप्लिकेट: //stackoverflow.com/questions/163009/urllib2-file-name) – KevinDTimm

उत्तर

22

प्रतिक्रिया http हेडर से फ़ाइल नाम पाने के लिए:

import cgi 

response = urllib2.urlopen(URL) 
_, params = cgi.parse_header(response.headers.get('Content-Disposition', '')) 
filename = params['filename'] 

URL से फ़ाइल नाम पाने के लिए:

import posixpath 
import urlparse 

path = urlparse.urlsplit(URL).path 
filename = posixpath.basename(path) 
+0

ग्रेट उत्तर, एक छोटा फिक्स। Os.path.basename (पथ) का उपयोग करना ऐसा करने का एक पार मंच तरीका है। –

+1

@ जॉर्ज वर्गास: नहीं। 'posixpath' यहाँ सही मॉड्यूल है। इसके अलावा यहां 'os.path' का उपयोग करने की गलती होगी। यदि आप "क्यों" नहीं समझ सकते हैं, तो पूछें, मैं विस्तृत करूंगा। – jfs

+0

मैं पूछूंगा: पॉजिक्सपाथ का उपयोग क्यों करना चाहिए? –

1

आप जो पूछ रहे हैं उससे ज्यादा समझ में नहीं आता है। आपके पास एकमात्र चीज यूआरएल है। या तो URL से पिछले भाग को निकालने या आप की तरह

content-disposition: attachment;filename="foo.bar" 

इस शीर्ष लेख सर्वर द्वारा निर्धारित किया जा सकता संकेत मिलता है कि फ़ाइल नाम foo.bar है कुछ के लिए HTTP प्रतिक्रिया की जाँच कर सकते हैं। यह आमतौर पर फ़ाइल डाउनलोड या कुछ समान के लिए प्रयोग किया जाता है।

0

मैं खोज के लिए आप गूगल पर सवाल और मैंने देखा कि यह पहले stackoverflow में उत्तर दिया गया मुझे विश्वास है।

इस पोस्ट को देख प्रयास करें:

Using urllib2 in Python. How do I get the name of the file I am downloading?

फ़ाइल नाम आमतौर पर सामग्री-स्वभाव हेडर के माध्यम से सर्वर द्वारा शामिल है:

content-disposition: attachment; filename=foo.pdf 

आप हेडर की पहुंच है

result = urllib2.urlopen(...) 
result.info() <- contains the headers 


i>>> import urllib2 
ur>>> result = urllib2.urlopen('http://zopyx.com') 
>>> print result 
<addinfourl at 4302289808 whose fp = <socket._fileobject object at 0x1006dd5d0>> 
>>> result.info() 
<httplib.HTTPMessage instance at 0x1006fbab8> 
>>> result.info().headers 
['Date: Mon, 04 Apr 2011 02:08:28 GMT\r\n', 'Server: Zope/(unreleased version, python 2.4.6, linux2) ZServer/1.1 
के माध्यम से

प्लोन/3.3.4 \ r \ n ',' सामग्री-लंबाई: 15321 \ r \ n ',' सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; charset = utf-8 \ r \ n ',' Via: 1.1 www.zopyx.com \ r \ n ', ' कैश-कंट्रोल: अधिकतम आयु = 3600 \ r \ n ',' समाप्त हो जाता है: सोम, 04 अप्रैल 2011 03:08:28 जीएमटी \ r \ n ',' कनेक्शन: करीब \ r \ n ']

देखें

http://docs.python.org/library/urllib2.html

[urllib2 फ़ाइल नाम] (http के
संबंधित मुद्दे