একটি পাঠ্য ফাইলে একটি URL দেওয়া হয়েছে, পাঠ্য ফাইলের বিষয়বস্তু পড়ার সহজ উপায় কী?


113

পাইথনে, যখন একটি পাঠ্য ফাইলের জন্য URL দেওয়া হয়, পাঠ্য ফাইলের বাইরে থাকা সামগ্রীগুলি অ্যাক্সেস করার এবং পাঠ্য ফাইলটির স্থানীয় অনুলিপি সংরক্ষণ না করে স্থানীয়ভাবে স্থানীয়ভাবে লাইন-বাই-লাইনের ফাইলগুলি প্রিন্ট করার সহজ উপায় কী?

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

উত্তর:


114

09/2016 সম্পাদনা করুন: পাইথন 3 এ এবং urlib2 এর পরিবর্তে 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

পাইথন ৩-তে দ্বিতীয় উদাহরণ:

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. সম্পাদনা কাজ করে: দেখুন অ্যান্ড্রু মাওয়ের উত্তর পাইথন 3. জন্য
leafmeal

পাইথন 3 জন্য এটি হবে: পাঠ্য = urllib.request.urlopen (target_url) .read ()
বিভেদক



6
import urllib2

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

2
+1, তবে দয়া করে মনে রাখবেন যে এটি সবচেয়ে সহজতম উপায়, নিরাপদ নয়। যদি কোনও ত্রুটি সার্ভারের পক্ষ থেকে ঘটে থাকে এবং চিরতরে এই এক সরবরাহ করার সামগ্রী হয় তবে আপনি অসীম লুপটি দিয়ে শেষ করতে পারেন।
ই-সন্তুষ্ট

5

পাইথন 3 এর আরেকটি উপায় হ'ল urllib3 প্যাকেজটি ব্যবহার করা ।

import urllib3

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

এটি urllib এর চেয়ে ভাল বিকল্প হতে পারে যেহেতু urllib3 আসবে

  • থ্রেড সুরক্ষা।
  • সংযোগ পুলিং।
  • ক্লায়েন্ট সাইড এসএসএল / টিএলএস যাচাইকরণ।
  • মাল্টিপার্ট এনকোডিং সহ ফাইল আপলোড।
  • অনুরোধগুলি পুনরায় চেষ্টা করার জন্য এবং এইচটিটিপি পুনর্নির্দেশগুলির সাথে মোকাবিলা করার জন্য সহায়ক।
  • জিজিপ এবং ডিফল্ট এনকোডিংয়ের জন্য সমর্থন।
  • HTTP এবং SOCKS এর জন্য প্রক্সি সমর্থন।
  • 100% পরীক্ষার কভারেজ।

2
অনুরোধ গ্রন্থাগার আংশিকভাবে urllib3 উপর ভিত্তি করে।
ফ্লয়েডন

প্রকৃতপক্ষে এটি উপরের উত্তরগুলির মধ্যে কেবলমাত্র পাইথনের সর্বশেষতম সংস্করণে (urllibx) ইনস্টল করবে।
অ্যাবস্ট্রাক্ট

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

পাইথন 3 এর জন্য কাজ করার জন্য পাইথন 2 এর জন্য @ কেন-কিন্ডার প্রস্তাবিত সমাধানটি কেবল এখানে আপডেট করে:

import urllib
urllib.request.urlopen(target_url).read()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.