अचार फ़ाइल कैसे पढ़ें?


85

मैंने कुछ डेटा बनाया और इसे कई बार इस तरह संग्रहीत किया:

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

हर बार फ़ाइल का आकार बढ़ा, लेकिन जब मैंने फ़ाइल को खोला

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

मैं पिछली बार के केवल डेटा देख सकता हूं। मैं फ़ाइल को सही ढंग से कैसे पढ़ सकता हूं?


1
आप अपनी फ़ाइल में ऑब्जेक्ट जोड़ रहे हैं। जब आप अनपिक करते हैं तो आप केवल पहली एंट्री करते हैं। क्या आप वाकई उन सभी प्रविष्टियों की आवश्यकता है? यदि नहीं - परिवर्तन करने के लिएopen('filename', 'wb')
एंड्री

हां, मुझे सभी प्रविष्टियों की आवश्यकता है। फ़ाइलों का आकार दर्शाता है कि इसमें यह सब शामिल है।
केनेंबेक अरजमातोव

1
तब @jsbueno उनके जवाब में सही है।
एंड्री २


मैंने आपके ब्राउज़र में अचार फ़ाइलों को सीधे देखने के लिए कुछ बनाया है: pickleviewer.com
क्रिस्टो एस क्रिस्टोव

जवाबों:


91

अचार एक समय में एक ही वस्तु को क्रमबद्ध करता है, और एक एकल ऑब्जेक्ट को वापस पढ़ता है - फ़ाइल पर अनुक्रमित डेटा को रिकॉर्ड किया जाता है।

यदि आप बस करते pickle.loadहैं, तो आपको फ़ाइल में अनुक्रमित पहली वस्तु को पढ़ना चाहिए (जैसा कि आपने लिखा है आखिरी नहीं)।

पहली वस्तु को अनसुना करने के बाद, फ़ाइल-पॉइंटर अगली वस्तु के संकेत पर है - यदि आप बस pickle.loadफिर से कॉल करते हैं, तो यह पढ़ेगा कि अगली वस्तु - फाइल के अंत तक ऐसा करें।

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

21

पंडों 0.22+ के हिस्से के रूप में एक read_pickle फ़ंक्शन है

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/


-25

आप इसके साथ कुछ नहीं कर रहे हैं, आप केवल फ़ाइल लोड कर रहे हैं।

for line in x:
    print x

प्रत्येक पंक्ति को प्रिंट करेगा। (बयान के साथ दूसरे में)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.