আচার ফাইল পড়বেন কীভাবে?


91

আমি কিছু ডেটা তৈরি করেছি এবং এটি বেশ কয়েকবার সংরক্ষণ করেছি:

with open('filename', 'a') as f:
        pickle.dump(data, f)

প্রতিবার ফাইলের আকার বেড়েছে তবে আমি যখন ফাইল খুলি

with open('filename', 'rb') as f:
    x = pickle.load(f)

আমি শেষ সময় থেকে কেবলমাত্র ডেটা দেখতে পাচ্ছি। আমি কীভাবে ফাইলটি সঠিকভাবে পড়তে পারি?


4
আপনি আপনার ফাইলে বস্তু সংযোজন করছেন। আপনি যখন আনপিক করেন তখন কেবল প্রথম এন্ট্রিটি আনপিক করুন। আপনি কি নিশ্চিত যে আপনার এই সমস্ত এন্ট্রি প্রয়োজন? যদি তা না হয়open('filename', 'wb')
এন্ড্রে

হ্যাঁ, আমার সব এন্ট্রি দরকার। ফাইলগুলির আকার দেখায় যে এটিতে এটি রয়েছে।
কেনেনবেক আরজিমাতভ

4
তারপরে @ জাসবুয়েনো তার উত্তরে সঠিক।
আন্দ্রে


আমি সরাসরি আপনার ব্রাউজারে আচারের ফাইলগুলি দেখার জন্য কিছু তৈরি করেছি: pickleviewer.com
ক্রিস্টো এস

উত্তর:


98

আচার একবারে একটি একক বস্তুকে সিরিয়ালাইজ করে, এবং একটি একক বস্তুটি ফিরে পড়ে - আচারযুক্ত তথ্যটি ফাইলের ক্রমে রেকর্ড করা হয়।

আপনি যদি সহজভাবে করেন তবে আপনাকে pickle.loadফাইলটিতে সিরিয়ালযুক্ত প্রথম অবজেক্টটি পড়তে হবে (আপনি যেমন লিখেছেন তেমন শেষ নয়)।

প্রথম অবজেক্টটি আনসিরিয়ালাইজ করার পরে, ফাইল-পয়েন্টারটি পরবর্তী বস্তুর শুরুতে হয় - আপনি যদি কেবল pickle.loadআবার কল করেন তবে এটি পরবর্তী পদক্ষেপটি পড়বে - ফাইলটির শেষ না হওয়া পর্যন্ত এটি করুন।

objects = []
with (open("myfile", "rb")) as openfile:
    while True:
        try:
            objects.append(pickle.load(openfile))
        except EOFError:
            break

27

পান্ডাস 0.22+ এর অংশ হিসাবে একটি পঠন-পিকার ফাংশন রয়েছে

import pandas as pd

object = pd.read_pickle(r'filepath')

6

নীচে আপনি কীভাবে একটি আচার ফাইল লিখতে এবং পড়তে পারেন তার একটি উদাহরণ রয়েছে। মনে রাখবেন যে আপনি যদি ফাইলে আচারের ডেটা যুক্ত করে রাখেন তবে ফাইলটি শেষ অবধি পৌঁছানোর মাধ্যমে আপনি যা চান বা কোনও ব্যতিক্রম তৈরি না হওয়া পর্যন্ত আপনাকে ফাইলটি পড়া চালিয়ে যেতে হবে। এটিই শেষ ফাংশনটি করে।

import os
import pickle


PICKLE_FILE = 'pickle.dat'


def main():
    # append data to the pickle file
    add_to_pickle(PICKLE_FILE, 123)
    add_to_pickle(PICKLE_FILE, 'Hello')
    add_to_pickle(PICKLE_FILE, None)
    add_to_pickle(PICKLE_FILE, b'World')
    add_to_pickle(PICKLE_FILE, 456.789)
    # load & show all stored objects
    for item in read_from_pickle(PICKLE_FILE):
        print(repr(item))
    os.remove(PICKLE_FILE)


def add_to_pickle(path, item):
    with open(path, 'ab') as file:
        pickle.dump(item, file, pickle.HIGHEST_PROTOCOL)


def read_from_pickle(path):
    with open(path, 'rb') as file:
        try:
            while True:
                yield pickle.load(file)
        except EOFError:
            pass


if __name__ == '__main__':
    main()

6

আমি একটি সফ্টওয়্যার সরঞ্জাম তৈরি করেছি যা আপনার ব্রাউজারে সরাসরি (বেশিরভাগ) পিকল ফাইলগুলি খোলে (কিছুই স্থানান্তরিত হয় না সুতরাং এটি 100% ব্যক্তিগত):

https://pickleviewer.com/


-27

আপনি এটি দিয়ে কিছুই করছেন না, আপনি কেবল ফাইলটি লোড করছেন।

for line in x:
    print x

প্রতিটি লাইন মুদ্রণ করবে। (দ্বিতীয় বিবৃতি দিয়ে)

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