csv.Error: পুনরুক্তি করা উচিত স্ট্রিংগুলি, বাইট না দিয়ে ফিরে আসা উচিত


158

Sample.csv এ নিম্নলিখিত রয়েছে:

NAME    Id   No  Dept
Tom     1    12   CS
Hendry  2    35   EC
Bahamas 3    21   IT
Frank   4    61   EE

এবং পাইথন ফাইলটিতে নিম্নলিখিত কোড রয়েছে:

import csv
ifile  = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
    print (row) 

আমি যখন পাইথনে উপরের কোডটি চালনা করি তখন আমি নিম্নলিখিত ব্যতিক্রমগুলি পাই:

"Csvformat.py" ফাইলটি, লাইন 4, সারিতে পড়ার জন্য: _csv. ত্রুটি: পুনরুক্তিকারীকে স্ট্রিং ফিরিয়ে নেওয়া উচিত, বাইটগুলি নয় (আপনি ফাইলটি পাঠ্য মোডে খোলেন?)

আমি কীভাবে এটি ঠিক করতে পারি?

উত্তর:


214

আপনি ফাইলটি পাঠ্য মোডে খুলুন।

আরো নির্দিষ্টভাবে:

ifile  = open('sample.csv', "rt", encoding=<theencodingofthefile>)

এনকোডিংয়ের জন্য ভাল অনুমানগুলি হ'ল "ascii" এবং "utf8"। আপনি এনকোডিংটিও ছেড়ে দিতে পারেন এবং এটি সিস্টেম ডিফল্ট এনকোডিংটি ব্যবহার করবে যা ইউটিএফ 8 বলে মনে হয় তবে এটি অন্যরকম কিছু হতে পারে।


4
কেবল এটিতে যুক্ত করতে চাই যে আপনি যখন কোনও সিএসভি ফাইল থেকে / থেকে / পড়ার চেষ্টা করার সময় এনকোডিংয়ের ত্রুটিগুলি পান তবে একটি নির্দিষ্ট এনকোডিং যুক্ত করতে সহায়তা করতে পারে। আমি সবেমাত্র "এনকোডিং = 'utf-8'" যোগ করে এই বাগটি ঠিক করেছি।
কোভেফ

96

আমি আমার কোড দিয়ে এই সমস্যাটি ঠিক করেছি। কারণটি যে ব্যতিক্রমটি ছুঁড়েছে তা হ'ল আপনার যুক্তি rb। এতে পরিবর্তন করুন r

তোমার গোপন সংকেত:

import csv
ifile  = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
    print (row) 

নতুন কোড:

import csv
ifile  = open('sample.csv', "r")
read = csv.reader(ifile)
for row in read :
    print (row)

29

আপনার সমস্যা আপনি হয় bopenপতাকা। পতাকাটি rt(পড়ুন, পাঠ্য) ডিফল্ট, সুতরাং প্রসঙ্গে পরিচালক ব্যবহার করে কেবল এটি করুন:

with open('sample.csv') as ifile:
    read = csv.reader(ifile) 
    for row in read:
        print (row)  

কনটেক্সট ম্যানেজারটির অর্থ আপনার জেনেরিক ত্রুটি হ্যান্ডলিংয়ের প্রয়োজন নেই (এগুলি ছাড়া আপনি ফাইলটি খোলার সাথে আটকে যেতে পারেন, বিশেষত কোনও দোভাষীর সাহায্যে), কারণ এটি কোনও ত্রুটি বা প্রসঙ্গে প্রস্থান করার সময় স্বয়ংক্রিয়ভাবে ফাইলটি বন্ধ করে দেবে।

উপরেরটি একই:

with open('sample.csv', 'r') as ifile:
    ...

অথবা

with open('sample.csv', 'rt') as ifile:
    ...

withবিবৃতি প্রসঙ্গে পরিচালক ওরফে সব সময়ে, এই প্রশ্নের সঙ্গে কিছুই করার আছে!
রায়লুও 9:19

4
@ রায়লুও যখন আমি ফাইল হ্যান্ডলিং প্রদর্শিত করছি তখন আমি তার চারপাশের সেরা অনুশীলনগুলিও প্রদর্শন করতে যাচ্ছি। আমি এটি মোটামুটি ধারাবাহিকভাবে করি। আপনি যদি পাইথনে নতুন হন, এবং আপনি কোনও ফাইলের সাথে ইন্টারেক্টিভ সেশনে আটকে যান যা দিয়ে আপনি কিছু করতে পারবেন না, আপনি আমার পরামর্শটির প্রশংসা করবেন ...
অ্যারন হল

24

পাইথন 3-তে, csv.readerপ্রত্যাশা করে, এটি পুনরাবৃত্তিযোগ্য স্ট্রিংগুলি পাস করেছে, বাইটগুলি নয় not এই সমস্যার আরও একটি সমাধান এখানে codecsমডিউল ব্যবহার করে :

import csv
import codecs
ifile  = open('sample.csv', "rb")
read = csv.reader(codecs.iterdecode(ifile, 'utf-8'))
for row in read :
    print (row) 

3
মনে রাখবেন যে এই বিকল্পটি সবচেয়ে নিরাপদ নয়। আপনি যদি TextIOWrapper ব্যবহার করতে পারেন তবে আপনার উচিত। ইস্যুর বিবরণ: ইটারডাইকোড খালি স্ট্রিং খায় ইটারডাইকোড একাধিক বাইট অক্ষর সহ নিরাপদ নয় সমাধান: সিএসভি স্ট্রিমের উপর
টেক্সটআওআরএপার

1
ধন্যবাদ! পাইথন 3 এ এই সমস্যার মুখোমুখি হয়েছিল।
কেনি আয়ার্স

9

পাইথন ২.6.৪ সহ একটি পুরাতন পাইথন স্ক্রিপ্ট বিকাশ করার সময় আমার এই ত্রুটি হয়েছিল

3.6.2 এ আপডেট করার সময়, এই সিএসভি পড়ার ত্রুটিটি ঠিক করার জন্য আমাকে ওপেন কলগুলি থেকে সমস্ত 'আরবি' পরামিতিগুলি সরিয়ে ফেলতে হয়েছিল ।

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