সিএসভি নতুন-লাইন চরিত্রটি অব্যক্ত ফিল্ড ত্রুটিতে দেখা গেছে


121

নিম্নলিখিত কোডটি আজ অবধি কাজ করেছে যখন আমি একটি উইন্ডোজ মেশিন থেকে আমদানি করেছি এবং এই ত্রুটিটি পেয়েছি:

অব্যক্ত ক্ষেত্রে নতুন লাইনের চরিত্রটি দেখা যাচ্ছে - আপনার কি সর্বজনীন-নতুনলাইন মোডে ফাইলটি খোলার দরকার আছে?

import csv

class CSV:


    def __init__(self, file=None):
        self.file = file

    def read_file(self):
        data = []
        file_read = csv.reader(self.file)
        for row in file_read:
            data.append(row)
        return data

    def get_row_count(self):
        return len(self.read_file())

    def get_column_count(self):
        new_data = self.read_file()
        return len(new_data[0])

    def get_data(self, rows=1):
        data = self.read_file()

        return data[:rows]

আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি?

def upload_configurator(request, id=None):
    """
    A view that allows the user to configurator the uploaded CSV.
    """
    upload = Upload.objects.get(id=id)
    csvobject = CSV(upload.filepath)

    upload.num_records = csvobject.get_row_count()
    upload.num_columns = csvobject.get_column_count()
    upload.save()

    form = ConfiguratorForm()

    row_count = csvobject.get_row_count()
    colum_count = csvobject.get_column_count()
    first_row = csvobject.get_data(rows=1)
    first_two_rows = csvobject.get_data(rows=5)

নীচে রেক্টামমেলেঙ্কোলিকের উত্তরটি আমার অনুরূপ ইস্যুটি সমাধান করেছে। stackoverflow.com/a/17315726/3131666
kmantel

উত্তর:


181

সিএসভি ফাইলটি নিজেই দেখে ভাল হবে তবে এটি আপনার পক্ষে কাজ করতে পারে, চেষ্টা করে দেখুন, প্রতিস্থাপন করুন:

file_read = csv.reader(self.file)

সঙ্গে:

file_read = csv.reader(self.file, dialect=csv.excel_tab)

অথবা, এর সাথে একটি ফাইল খুলুন universal newline modeএবং এটিকে এখানে পাস করুন csv.reader:

reader = csv.reader(open(self.file, 'rU'), dialect=csv.excel_tab)

অথবা, এর splitlines()মতো ব্যবহার করুন :

def read_file(self):
    with open(self.file, 'r') as f:
        data = [row for row in csv.reader(f.read().splitlines())]
    return data

এটি এখন একই ত্রুটিটি দেয় তবে আপলোড শুরু করে লাইনে cum_records = csvobject.get_row_count () এখন
গ্রান্টউ

1
এবং যখন আমি বিভক্ত লাইনের সংস্করণটি চেষ্টা করি (যা খুব শীতল ধন্যবাদ) আমি ইউনিকোডে জোর দিয়েছি: স্ট্রিং বা বাফার দরকার, এস 3 বোটোস্টেরেজফিল পাওয়া গেছে
গ্র্যান্টু

4
কোন বিকল্পটি অবশেষে কাজ করেছে? BTW, ফাইল দুইবার পড়া হয়: এ get_row_count()এবং get_column_count()- বিবেচনা ফাইল পড়া __init__এবং মনে রাখবেন dataমধ্যে self.data, তারপর অন্যান্য পদ্ধতি এটি ব্যবহার।
অ্যালেক্সেক্স

স্প্লিটলাইনগুলির জন্য +1 () যা ওএসএক্সে বিভিন্ন ফর্ম্যাটিং বিকল্পের সাথে গোলমাল এড়াতে পারে। আশা করি এটি অন্যান্য প্ল্যাটফর্মগুলিতেও কাজ করে ...
পাইথন

দুর্দান্ত উত্তর। - "ডায়ালেক্ট = csv.excel_tab" ব্যবহার করে তবে, CSv.DictReader ব্যবহার করার পরে আউটপুট স্ক্রু করে। কেবল 'আরইউ' বিকল্পগুলি যাদুকরভাবে কাজ করে যদিও
মার্ফি

52

আমি বুঝতে পারি এটি একটি পুরানো পোস্ট, তবে আমি একই সমস্যায় পড়েছি এবং সঠিক উত্তরটি দেখতে পাচ্ছি না তাই আমি এটিকে চেষ্টা করে দেখব

পাইথন ত্রুটি:

_csv.Error: new-line character seen in unquoted field

ম্যাকিনটোস (প্রাক ওএস এক্স ফরম্যাটেড) সিএসভি ফাইলগুলি পড়ার চেষ্টা করে। এগুলি পাঠ্য ফাইল যা লাইন শেষের জন্য সিআর ব্যবহার করে। এমএস অফিস ব্যবহার করে নিশ্চিত হয়ে নিন যে আপনি সরল সিএসভি ফর্ম্যাট বা সিএসভি (এমএস-ডস) নির্বাচন করেছেনসিএসভি (ম্যাকিনটোস) সংরক্ষণের মতো প্রকার হিসাবে ব্যবহার করবেন না

আমার পছন্দসই EOL সংস্করণটি হবে LF (ইউনিক্স / লিনাক্স / অ্যাপল), তবে আমি মনে করি না এমএস অফিস এই ফর্ম্যাটে সংরক্ষণের বিকল্প সরবরাহ করে।


4
এমএস ডস কমা বিচ্ছেদ আমার জন্য কাজ করে না (একই ত্রুটি), তবে উইন্ডোজ কমা বিচ্ছিন্ন।
tmthyjames

3
আপনি যদি কোনও ম্যাকের সাথে থাকেন তবে এটি একেবারে সঠিক উত্তর।
হাশহাজার্ড

আমি ওএস এক্সে একই সমস্যা পেয়েছি I আমি নিজেকে একটি নতুন সিএসভি ফাইল তৈরি করতে দেখছি। সরল CSV ফর্ম্যাট বা CSV (এমএস-ডস) হিসাবে কেবল বর্তমানটিকে সংরক্ষণ করা সমস্যার সমাধান করে না।
পাইডারম্যান

1
ওএস এক্স-এ, উইন্ডোজ কমা বিচ্ছিন্ন সিএসভি কাজ করেছিল, এমএস ডস কমা পৃথক করেনি।
ব্যবহারকারী 2348114

31

ম্যাক ওএস এক্স এর জন্য আপনার সিএসভি ফাইলটি "উইন্ডোজ কমা পৃথক (.csv)" ফর্ম্যাটে সংরক্ষণ করুন।


1
ধন্যবাদ, এটি প্রয়োজনীয় উপাদান ছিল, কারণ আমি ম্যাক ডাব্লু / এমএস অফিস ব্যবহার করছি।
travelingbones

18

যদি ম্যাক এ আপনার সাথে এটি ঘটে (যেমন এটি আমার সাথে হয়েছিল):

  1. ফাইল হিসাবে সংরক্ষণ করুন CSV (MS-DOS Comma-Separated)
  2. নিম্নলিখিত স্ক্রিপ্ট চালান

    with open(csv_filename, 'rU') as csvfile:
        csvreader = csv.reader(csvfile)
        for row in csvreader:
            print ', '.join(row)
    

2
তুমি সবেমাত্র আমার পৃথিবীকে কাঁপিয়ে দিয়েছ।
কেটা

5

প্রথমে dos2unixআপনার উইন্ডোজ আমদানি করা ফাইলগুলি চালানোর চেষ্টা করুন


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

@ গ্রান্টু আপনি ম্যাক ওএস এক্স 10.0 বা তার পরে উল্লেখ করছেন, ম্যাক ওএস 9 বা তার আগের নয়, সঠিক? 9 থেকে 10 এর মধ্যে, ম্যাক ওএস \x0d(প্রোডোস) লাইন শেষ থেকে (ইউএনআইএক্স) লাইন এন্ডিংগুলিতে স্যুইচ করেছে \x0a
দামিয়ান ইয়ারিক

2

এটি একটি ত্রুটি যার মুখোমুখি হয়েছিল is আমি ম্যাক ওএসএক্সে .csv ফাইলটি সংরক্ষণ করেছিলাম।

সংরক্ষণের সময়, এটিকে "উইন্ডোজ কমা বিভাজিত মান (.csv)" হিসাবে সংরক্ষণ করুন যা সমস্যার সমাধান করেছে।


1

এটি ওএসএক্সে আমার জন্য কাজ করেছিল।

# allow variable to opened as files
from io import StringIO

# library to map other strange (accented) characters back into UTF-8
from unidecode import unidecode

# cleanse input file with Windows formating to plain UTF-8 string
with open(filename, 'rb') as fID:
    uncleansedBytes = fID.read()
    # decode the file using the correct encoding scheme
    # (probably this old windows one) 
    uncleansedText = uncleansedBytes.decode('Windows-1252')

    # replace carriage-returns with new-lines
    cleansedText = uncleansedText.replace('\r', '\n')

    # map any other non UTF-8 characters into UTF-8
    asciiText = unidecode(cleansedText)

# read each line of the csv file and store as an array of dicts, 
# use first line as field names for each dict. 
reader = csv.DictReader(StringIO(cleansedText))
for line_entry in reader:
    # do something with your read data 

1

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

with urllib.request.urlopen(q) as response:
    raw_data = response.read()
    encoding = response.info().get_content_charset('utf8') 
    data = raw_data.decode(encoding)
    if '\r\n' not in data:
        # proably a windows delimited thing...try to update it
        data = data.replace('\r', '\r\n')

প্রচুর সিএসভি ফাইলের পক্ষে যুক্তিসঙ্গত হতে পারে না, তবে আমার ব্যবহারের ক্ষেত্রে ভাল কাজ করেছে।


এটি আমার সমস্যার সমাধান করেছে , ধন্যবাদ
here

0

বিকল্প এবং দ্রুত সমাধান: আমি একই ত্রুটির মুখোমুখি হয়েছি। আমি আমার লুবুন্টু মেশিনে জিনুমেরিকের "উইয়ার্ড" সিএসভি ফাইলটি আবার খুললাম এবং সিএসভি ফাইল হিসাবে ফাইলটি রফতানি করেছি। এটি সমস্যার সমাধান করেছে।

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