TypeError: অজগর এবং সিএসভিতে বাইট-এর মতো অবজেক্ট প্রয়োজন, 'স্ট্র' নয়


173

TypeError: বাইট-এর মতো অবজেক্ট প্রয়োজন, 'স্ট্র' নয়

সিএসভি ফাইলে এইচটিএমএল টেবিলের ডেটা সংরক্ষণ করার জন্য পাইথন কোডের নিচে কার্যকর করার সময় ত্রুটি পেয়েছে। রাইডআপ কীভাবে পাবেন তা জানেন না p

import csv
import requests
from bs4 import BeautifulSoup

url='http://www.mapsofindia.com/districts-india/'
response=requests.get(url)
html=response.content

soup=BeautifulSoup(html,'html.parser')
table=soup.find('table', attrs={'class':'tableizer-table'})
list_of_rows=[]
for row in table.findAll('tr')[1:]:
    list_of_cells=[]
    for cell in row.findAll('td'):
        list_of_cells.append(cell.text)
    list_of_rows.append(list_of_cells)
outfile=open('./immates.csv','wb')
writer=csv.writer(outfile)
writer.writerow(["SNo", "States", "Dist", "Population"])
writer.writerows(list_of_rows)

শেষ লাইন উপরে।



হ্যালো - আমি এটিএমএক্স-লিনাক্সে এটিএম এ চালানোর চেষ্টা করেছি - তবে আমি এটি ফিরে পেয়েছি: :ট্রেসব্যাক (সর্বশেষতম কল): ফাইল "/home/martin/.atom/python/example/bs_gumtree_pl.py", লাইন ২০, <module> Writer.writerows (list_of_rows) UnicodeEncodeError: 'ascii' কোডেক অক্ষরটি ইউ '\ xa0' পজিশনে এনকোড করতে পারে না: অরিনাল পরিসীমা (128) নয় [2.015s এ সমাপ্ত] - আচ্ছা আমি ভাবছি কি এখানে চলে !? আপনার কাছ থেকে শুনতে ভালোবাসি
শুক্র

উত্তর:


332

আপনি পাইথন 3 এর পরিবর্তে পাইথন 2 পদ্ধতি ব্যবহার করছেন।

পরিবর্তন:

outfile=open('./immates.csv','wb')

প্রতি:

outfile=open('./immates.csv','w')

এবং আপনি নিম্নলিখিত আউটপুট সহ একটি ফাইল পাবেন:

SNo,States,Dist,Population
1,Andhra Pradesh,13,49378776
2,Arunachal Pradesh,16,1382611
3,Assam,27,31169272
4,Bihar,38,103804637
5,Chhattisgarh,19,25540196
6,Goa,2,1457723
7,Gujarat,26,60383628
.....

পাইথন 3 সিএসভিতে পাঠ্য মোডে ইনপুট লাগে, অন্যদিকে পাইথন 2 এ এটি বাইনারি মোডে নিয়েছিল।

যোগ করার জন্য সম্পাদিত

আমি যে কোডটি চালিয়েছি তা এখানে:

url='http://www.mapsofindia.com/districts-india/'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)
table=soup.find('table', attrs={'class':'tableizer-table'})
list_of_rows=[]
for row in table.findAll('tr')[1:]:
    list_of_cells=[]
    for cell in row.findAll('td'):
        list_of_cells.append(cell.text)
    list_of_rows.append(list_of_cells)
outfile = open('./immates.csv','w')
writer=csv.writer(outfile)
writer.writerow(['SNo', 'States', 'Dist', 'Population'])
writer.writerows(list_of_rows)

20
csvমডিউলটি ব্যবহারের জন্য , পাইথন 3 এর পরামিতি openহিসাবেও থাকতে হবে [রেফ ]newline=''
মার্ক টোলোনেন

1
'Wb' স্ট্রিংটি 'ডাব্লু' এর জন্য আমার পক্ষে কাজ করে। অনেক অনেক ধন্যবাদ
লোক হুইন

আপনি যদি বাফার ব্যবহার করেন তবে ভিনিয়েলের উত্তর দেখুন !
হ্যান্ডরাস

হাই সেখানে - আমি কোডটি চেষ্টা করে দেখেছি - এবং এটি ফিরে পেয়েছি: mod ট্রেসব্যাক (সর্বশেষতম কলটি শেষ): ফাইল "/ home/martin/.atom/python/example/bs_gumtree_pl.py", লাইন 20, <মডিউল> ইউনিকোড এঙ্কোডার : 'আসকি' কোডেক অক্ষরটি আপনার '\ xa0' পয়েন্টে এনকোড করতে পারে না 0: অর্ডিনাল রেঞ্জ নয় (128) [1.415s এ সমাপ্ত] here আমার এখানে কোনও আঠালো নেই
শূন্য

21

পাইথন 3 নিয়ে আমারও একই সমস্যা ছিল। আমার কোড লিখতে ছিল io.BytesIO()

io.StringIO()সমাধান সঙ্গে প্রতিস্থাপন ।


আমার সাথে স্ট্রিংওও ঘটে
thebencounter

একটি বিবেচনা: io.StringIO()স্মৃতি লোভ এবং বড় ফাইলগুলির সাথে মাথা ব্যথা হতে পারে।
ফ্ল্যাভিও

1
file = open('parsed_data.txt', 'w')
for link in soup.findAll('a', attrs={'href': re.compile("^http")}): print (link)
soup_link = str(link)
print (soup_link)
file.write(soup_link)
file.flush()
file.close()

আমার ক্ষেত্রে, আমি পাইথন ৩.x এর সাথে একটি .txt লিখতে বিউটিফুলসপ ব্যবহার করেছি। এটি একই সমস্যা ছিল। ঠিক যেমন @tsduteba বলেছিলেন, প্রথম লাইনে 'wb' পরিবর্তন করে 'ডাব্লু' করুন।


উত্তর দেওয়ার সময় আপনার উত্তরটি হ'ল কেন তা সম্পর্কে কিছুটা ব্যাখ্যা দেওয়া ভাল । এক্ষেত্রে এই উত্তর গৃহীত উত্তর থেকে কীভাবে আলাদা?
স্টিফেন রাউচ

@ স্টেফেনআরচ আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আমি এখানে নতুন এবং বেশ কয়েক সপ্তাহ আগে পাইথন শিখতে শুরু করেছি। ভবিষ্যতে আরও ভাল উত্তর দেওয়ার চেষ্টা করব।
ইয়াং লি

আপনি এই পোস্টটি সম্পাদনা করতে পারেন এবং আরও বিশদ যুক্ত করতে পারেন। পোস্টের নীচে এবং বামে সম্পাদনা বোতামটি হিট করুন।
স্টিফেন রাউচ

@ স্টেফেনরউচ আপনার টিপসের জন্য ধন্যবাদ!
ইয়াং লি

1

শুধু ডাব্লু ডাব্লু ডাব্লু পরিবর্তন

outfile=open('./immates.csv','wb')

প্রতি

outfile=open('./immates.csv','w')

1

আপনি বাইনারি মোডে সিএসভি ফাইল খুলছেন, এটি হওয়া উচিত 'w'

import csv

# open csv file in write mode with utf-8 encoding
with open('output.csv','w',encoding='utf-8',newline='')as w:
    fieldnames = ["SNo", "States", "Dist", "Population"]
    writer = csv.DictWriter(w, fieldnames=fieldnames)
    # write list of dicts
    writer.writerows(list_of_dicts) #writerow(dict) if write one row at time
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.