किसी टेक्स्ट फ़ाइल में URL को देखते हुए, टेक्स्ट फ़ाइल की सामग्री को पढ़ने का सबसे सरल तरीका क्या है?


113

पायथन में, जब किसी टेक्स्ट फ़ाइल के लिए URL दिया जाता है, तो टेक्स्ट फ़ाइल की सामग्री को एक्सेस करने का सबसे सरल तरीका क्या है और टेक्स्ट फ़ाइल की स्थानीय कॉपी को सहेजे बिना स्थानीय स्तर पर लाइन-बाय-लाइन फ़ाइल की सामग्री को प्रिंट करना है?

TargetURL=http://www.myhost.com/SomeFile.txt
#read the file
#print first line
#print second line
#etc

जवाबों:


114

09/2016 संपादित करें: पायथन 3 में और urllib2 के बजाय urllib.request का उपयोग करें

वास्तव में सबसे सरल तरीका है:

import urllib2  # the lib that handles the url stuff

data = urllib2.urlopen(target_url) # it's a file like object and works just like a file
for line in data: # files are iterable
    print line

जैसा कि सुझाया गया है, आपको "रीडलाइन" की भी आवश्यकता नहीं है। आप इसे छोटा भी कर सकते हैं: *

import urllib2

for line in urllib2.urlopen(target_url):
    print line

लेकिन पायथन में याद रखें, पठनीयता मायने रखती है।

हालाँकि, यह सबसे सरल तरीका है, लेकिन सुरक्षित तरीका नहीं है क्योंकि अधिकांश समय नेटवर्क प्रोग्रामिंग के साथ, आप नहीं जानते कि क्या उम्मीद की जाने वाली डेटा की मात्रा का सम्मान किया जाएगा। इसलिए आप आम तौर पर डेटा की एक निश्चित और उचित मात्रा को बेहतर ढंग से पढ़ेंगे, कुछ ऐसा होगा जिसे आप अपने द्वारा अपेक्षित डेटा के लिए पर्याप्त जानते हैं लेकिन आपकी स्क्रिप्ट को बाढ़ से बचाएंगे:

import urllib2

data = urllib2.urlopen("http://www.google.com").read(20000) # read only 20 000 chars
data = data.split("\n") # then split it into lines

for line in data:
    print line

* पायथन 3 में दूसरा उदाहरण:

import urllib.request  # the lib that handles the url stuff

for line in urllib.request.urlopen(target_url):
    print(line.decode('utf-8')) #utf-8 or iso8859-1 or whatever the page encoding scheme is

38

मैं अजगर के लिए नौसिखिया हूं और स्वीकृत समाधान में पायथन 3 के बारे में अपमानजनक टिप्पणी भ्रामक थी। पोस्टरिटी के लिए, पायथन 3 में ऐसा करने का कोड है

import urllib.request
data = urllib.request.urlopen(target_url)

for line in data:
    ...

या वैकल्पिक रूप से

from urllib.request import urlopen
data = urlopen(target_url)

ध्यान दें कि बस import urllibकाम नहीं करता है।


24

वास्तव में लाइन-बाय-लाइन पढ़ने की कोई आवश्यकता नहीं है। आप इस तरह से पूरी बात प्राप्त कर सकते हैं:

import urllib
txt = urllib.urlopen(target_url).read()

2
यह काम नहीं करता है: विशेषता: मॉड्यूल: 'urllib' में कोई विशेषता नहीं है '
— urlopen

1
यह उत्तर केवल पायथन 2 में काम करता है। EDIT: एंड्रयू माओ का जवाब पायथन 3 के लिए देखें ।
— पत्तीमूल

पायथन 3 के लिए यह होगा: txt = urllib.request.urlopen (target_url) .read ()
— delimiter



6
import urllib2

f = urllib2.urlopen(target_url)
for l in f.readlines():
    print l

2
+1, लेकिन कृपया ध्यान दें कि यह सबसे सरल तरीका है, SAFEST नहीं। यदि सर्वर पर कोई त्रुटि होती है और यह वितरण सामग्री हमेशा के लिए होती है, तो आप अनंत लूप के साथ समाप्त हो सकते हैं।
— ई-सतीस

5

पायथन 3 में एक और तरीका है urllib3 पैकेज का उपयोग करना ।

import urllib3

http = urllib3.PoolManager()
response = http.request('GET', target_url)
data = response.data.decode('utf-8')

यह urllib से बेहतर विकल्प हो सकता है क्योंकि urllib3 समेटे हुए है

  • धागा सुरक्षा।
  • कनेक्शन पूलिंग।
  • क्लाइंट-साइड एसएसएल / टीएलएस सत्यापन।
  • मल्टीपार्ट एन्कोडिंग के साथ फ़ाइल अपलोड।
  • अनुरोधों को पुनः प्राप्त करने और HTTP रीडायरेक्ट से निपटने के लिए सहायक।
  • गज़िप और डिफ्लेक्ट एन्कोडिंग के लिए समर्थन।
  • HTTP और SOCKS के लिए प्रॉक्सी समर्थन।
  • 100% परीक्षण कवरेज।

2
अनुरोध पुस्तकालय आंशिक रूप से urllib3 पर आधारित है।
— फ्लोयड

वास्तव में यह उपरोक्त उत्तरों में से केवल एक है जो पायथन के नवीनतम संस्करण के लिए (urllibx) स्थापित करेगा।
— AbstractAlgebraLearner

3

मेरे लिए, उपरोक्त प्रतिक्रियाओं में से किसी ने भी सीधे आगे काम नहीं किया। इसके बजाय, मुझे निम्नलिखित (पायथन 3) करना था:

from urllib.request import urlopen

data = urlopen("[your url goes here]").read().decode('utf-8')

# Do what you need to do with the data.

0

यहाँ पायथन 2 के लिए काम करने के लिए @ ken-kinder द्वारा सुझाए गए समाधान को अपडेट कर रहे हैं:

import urllib
urllib.request.urlopen(target_url).read()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.